????

Your IP : 3.16.147.165


Current Path : C:/inetpub/vhost/donthu.nextform.vn/
Upload File :
Current File : C:/inetpub/vhost/donthu.nextform.vn/Microsoft.SqlServer.Assessment.dll

MZ����@���	�!�L�!This program cannot be run in DOS mode.

$PEL�����" 0�	�
  
 `
�$`��
O 
�
�#@
�
8  H.text(�	 �	 `.rsrc� 
�	@@.reloc@

@B�
H��$�	�U��l
�>�s%}�*Z�sE
%}F
%}G
*Rs<}(H
*{*sI
z0WoJ

+8oK
(L
�soM
-(L
(N
�soO
o
-��
,o
�*DK
0u�soP
(+oR

+@(S
rp(T
�soU
�soV
�soW
&(X
-���uo
�*Me"(+*v(Y
(Z
�soV
*0%s[

o\
o]
o]
o]
*v(L
(N
�soO
*N{^
s_
o`
*0Nsa

}b
{^
�c
sd
oe
2{^
of
(g
�]*�]*0Nsh

}i
{^
�j
sd
oe
2{^
of
(k
�~*�~*F{^
ol
�*(m
*Jsn
}^
(o
*0�sp

s,+Noq
u
	,:	o�~�%-&~��$sr
%��(+,	o'ot
Xou
2�ov
1How
ox
+(y
oz
({
-����o
�o)o|
*~�(o
*0�rpo}

o~
@�o
9�rprp(~
Xo�
<�o~
Y<�.rp(~
Xo�
/rp(~
Xo�
Q~�
Q+.rp(~
XYrp(~
Yo�
QXo�
Qrp(~
XYrp(~
Yo�
Q*QQQ*09rpo}

o~
3o
,rp(~
Xo�
QQ*0Drpo}

/Q*o~
3 o
,rp(~
Xo�
Q*Q*0=rpo}

2 o�
Qrp(~
Xo�
Q*~�
QQ*2(�*:(�*{*"}*�(�
}(o
}
}}
}*{*{	*{
*{*{*{
*0m	oo�

+E(�
(((�
o�
-s2(((�
o�
(�
o/(�
-����o
�*R^{*Z�s(%}�%}�*0m
(�

o�
YE4t8�(�
(�(�
(+o�
o�o�(�
*(�
(�(�
(+o�
o�o�o�
o�o�(�
*(�
(��%(�
(+�%o�
o�o��%o�
o�o��%o�
o�o��(�
*(�
(��%(�
(+�%o�
o�o��%o�
o�o��%o�
o�o��%o�
Y���(�
*0o1-*o*Js�
}(o
*{*{*0�(-o�

-&(-o�
s�
%o�
(.o�
*+\(-o�
(+
	o�
13(.o�
s�
%o�
(-	o�
(.o�
o�
-*X2�*:s2%}�*(0*vs�
}s�
}(o
*N(o
s�
}�
*:{�
o�
*6{�
o�
*0
{�
o�
&*{*"}*6sA%o8*(7*0*s8
}�~(7�9s�
o�
*05o�
, uI,o
(>�&�(=**
(-0Ps�

o�
&@o�
&{o�
&o�
&(�
-:o�
&o�
&}o�
&o�
*0�s�

u�-u-+>(?*rp(+~�%-&~��<s�
%��(+(�
*rpo�
&(�
-o�
&}o�
&(�
o�
(�
*0_(�
-(�
,*
+2o�
#3(@,o�
&
+Xo�
&Xo~
2�-*o�
*zo~
Y.Xo�
#��**J~�
}(o
*00sA�@
(�
(�
rp(�
s�
�*fs�
}�
(o
}�
*{�
*2{�
o�
*
*:{�
o�
*0/s�

}�
}�
{�
��
s�
o�
�*F{�
o�
��*2{�
o
*&(�
&*2{�
o�
*0,s�

}�
}�
{�
��
s�
o�
*0\s�

}�
}�
{�
��
s�
o�
(�
�]o�
-*{�
{�
o�
{�
*�s�
}o�(�
}*{*{*{*"}*N(PsCo�
*0)(Qo�o�
,o�
Q*(�
*"o*�(o
%-&rmps�
z}}}}(�
} *v(W�&%�}*{*{*{*{*{*0�s�

(\o�
 o�
(wo�
rypo�
(Yo�o�
rpo�
&(Z,+(xo�
rypo�
(Zo�
rpo�
&(]o�
+o�
o�
o�
 o�
&o
-��
,o
�%o�

	Yo�
o�
*�'�
{ *>(a}!*:(o
}"*{!*{"*�of,*(b,(bo�
*Q*0!Q,(c(,	og**{$*0`s�}$s�}%s�}&(o
(jr�ps�
}'r�p(nsH
}((�(k*0�(h�^(�
��s�
o�(h�a(�
��s�
o�(h�d(�
��s�
o�(h�f(�
��s�
o�(h�W(�
��s�
o�*0(lo�s�o0(lo�s�o0(lo�s�o0(lo�svo0(lo�sno0(lo�sdo0*{%*{&*{'*{(*0$-r�ps�
z(lo�
(�*0BsI
}�-r�ps�
z(lo��Js�
(+(�*03-r�ps�
z-r�ps�
z(lo�
(�*�-r�ps�
z-r�ps�
z(�*n-r�ps�
z(lo�*�-r�ps�
z-r�ps�
z(lo�*B(z(y*B({(y*B(|(y*�-r�ps�
z(lo�%-&oUo�
*0s�

({�
,o
�*
0s�

(|�
,o
�*
0(�
o+(}*>(lo�*07}�(�
}�}�|�(	+|�(�
*Z�sM%}�%}�*0 (�
r�po�

s�
*0G!}�}�}�(�
}�}�|�(
+|�(�
*0u"(�~�
(w(l(lo(+
(�
(+(�
o�~#(lo�o:o�~#(lo�o8o�*Zo�t�o�
u<*0?#}�}�(�
}�}�|�(
+|�(�
*0�$
	u>-	u?-P+jo+(�
(vo+o��,o+o�(�
�&%�s�
�%�Q*o�
o�
3o�
(�*Q*0s�%(q(9o�%o�%(ro�%(so�%o�%~�
o�%r[po�%o�%s�
o�%rqpo�%($o��#*�(�
s�
}�
(a(
}
*~(�
s�
}�
(a}
*�(�
s�
}�
(`(
}
*�(�
s�
}�
(`}
*{
*{�
*0 %(
o
,o
Q*Q*�]*s
*:(+(�*0?&(o
}.}+},(�
}/�i�&
o
}-*{+*{,*2(�o�*2(�o�*{-*{.*0�s�

(�o�
 o�
&(�,+(xo�
rypo�
(�o�
rpo�
&(�o�
+o�
o�
o�
 o�
&o
-��
,o
�%o�

	Yo�
o�
*Y'�
{/*�ocob(`}0}1*{0*2(�od*{1*:(�oe*0�'(f,*(,Y+H(�oPo

	oDo�o	
,	oH(��o

o�
,*X(��i2�+K+:(�oPo
oH(��o

o�
,*X(��i2�Q*�s
}6s
}8(o
}4*{2*"}2*{3*"}3*{4*{5*"}5*{6*{7*"}7*0?(}}(

}}|(+|(
*0E)(�o�QP(�
�(u�-u�,�(�(�Q
�*(&~9*0u*sa
}-
{�*{-*o�{o�(
,*o�o
{o�o
.*o��bs
(+*0�+o�%-&+o

o�o
~	%-&~�es
%�	(+o.
+so-
 �Zo
a
 �Z
o�o
%-
&��+
o
s
(
-��+	(
as
(

o
-��
,o
�*H�
0/,o�(
o
,(
%-&�*o
**(o
*.s��9*�(o
}<}:}>}=(�
}?*0W(�~%-&~
�hs 
%�~%-&~
�is!
%�(+};*{:*{;*{<*{=*{>*F(�o#
(+*0�-s�

(�o�
 o�
&(�,0(wo�
rypo�
(�o�o�
rpo�
&(�,+(xo�
rypo�
(�o�
rpo�
&(�o%
+7o&
('
o�
rypo�
((
o�
o�
 o�
&o
-��
,o
�%o�

	Yo�
o�
*�C�
{?*0n.(�
(to�o�
(�

()
ut,%��%��s%o%o*��%��s�*�(o
}A}@}B}C}D}E(�
}F*{@*{A*{B*{C*{D*{E*{F*{I*{J*{K*{L*{M*{N*{O*0Bs<}Ls*
}M(o
}I}J}K}N}O*6(�o+*:(�o�*6(�oB*0,/�ws+
(+(+
r�ps?(�*09/�ws+
(+(+
r�ps?oA(�oE*{T*0G0},
}-
}.
(/
}0
}1
|0
(+|0
(3
*^s�s4
}T(o
*(5
*"(6
*&(7
*&(8
*{U*(*"(*:(^(�*�(�
-+o
%-&~�
(�
(*&(*>(}U*&(*�-+o�%-&+o9
-+o�%-&+o9
(:
*0<1o�%-&��+o9
%-&��+
o
s

(
*(o
*{V*"}V*{W*"}W*{X*"}X*{Y*"}Y*{Z*"}Z*{[*"}[*{\*"}\*{]*"}]*F(%-&*(;
*(�*(o
*(*"(*&(*�(�
(J����(�
(*&(*(5
*"(6
*&(7
*&(8
*(*"(*&(*�(�
(M-+o<
%-&~�
(�
(*�(�
(M-+o<
%-&~�
(�
-+o�
(�
(*&(*2(K(*^(�
(K(�
(*&(*&(*(*"(*&(*^(�
(L(�
(*b(�
(L(�
(*&(*(*"(*&(*f(�
(N(�
(*n(�
(N(�
(*&(*0D(o
%-&r�ps�
z}f%-&r�ps�
z}dr�psH
}e*{e*{f*{d*:(*oe*�(o
}h}i(�
}j*2(6o�*2(6o�*(s*
*{g*{h*(+*{i*���%(1�%r�p�%(x�%ryp�%(/�(=
*{j*Z�s(�
(:�s*0�2и(�
(>
,_,u�-u�
-u-/+>��*(?
,
(�
(@
*o~
���*(+(+��*(�
(@

�K-+(B
%-&�(�
%-&r�ps'zo�
szs!z	*(r�/Wr�-r�XZ(=,(+�d**0Z3}}(+-/(B-&(+,{t�{t�(C
*{{(D
*0\u�-Pud-Hu�-@u�-8u�-0u�-(u�- u�-u�-u�-u�,**0$4oE

oF
oG
oH
oI
&*0�5o~
XsJ

"o�
&~koK
+DYoL
&`o�
&~l~ko�
(+�o�
&X~koN
/�o~
YoL
&"o�
&o�
*���%Ц(O
�k��%Х(O
�l*0W
{us,{(+�s}
�.{us,{(+�s}
��&�**PP.0S
{(=-
{(=,0{(+�d}{(+�d}
��&�**LL.(o
*0-6~m- r�p�6(�
oP
sQ

�m~m*~n*�n*V(DrOp~noR
*V(Drop~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Dr
p~noR
*V(Dr1p~noR
*V(Dr]p~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Dr#p~noR
*V(DrCp~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Drp~noR
*V(Dr=p~noR
*V(Dryp~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Drp~noR
*V(Dr?p~noR
*V(Drsp~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Dr#p~noR
*V(Drap~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Drp~noR
*V(Dr1p~noR
*V(Drop~noR
*V(Dr�p~noR
*V(Dr	p~noR
*V(Dr/	p~noR
*V(Dru	p~noR
*V(Dr�	p~noR
*V(Dr�	p~noR
*V(Dr-
p~noR
*V(Drm
p~noR
*V(Dr�
p~noR
*V(Dr�
p~noR
*V(Drp~noR
*V(Dr[p~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Drp~noR
*V(Dr5p~noR
*V(DrQp~noR
*V(Drkp~noR
*V(Dr�p~noR
*V(Dr�p~noR
*V(Dr
p~noR
*V(DrA
p~noR
*V(Dr�
p~noR
*V(Dr�
p~noR
*V(Drp~noR
*V(DrOp~noR
*V(Dryp~noR
*V(Dr�p~noR
*V(Dr�p~noR
*{p*"}p*{q*"}q*{o*0c(�
,([r�psS
zo~
Yo�
(T
,(Zr�psS
zo�
(T
,(]r�psS
z}o*{r*"}r*{s*{t*"}t*{u*"}u*{v*r(�%-&+o�
%-&~�
*�-r�ps�
zsA%o8(�*{w*"}w*{x*"}x*{y*"}y*{z*"}z*{{*{|*"}|*{}*"}}*F(�%-&(�
*0�7-r�ps�
z-rps�
z(�%-&+((+,�O� 
(y	o�o�sX�-(�o;
o�o�(�(�s�**"? .0Q~�
}osU
}s}t}u(V
sW
}vsX
}{~}|(o
*V(o
}~}*�(o
}~},sY
}�(�*{~*{*{�*{�*"}�*0�8-*3*(�o�(
-(�o�(
,*(�o�3*(�,o�-*(�oZ
o�oZ
.*(�o[

+E(\
o�(]
o^
-
�>(_
-,
�.(_
o
-
�(`
-����o
�*	*{R��-*3*(B
oB
(a
,*t9(�*049(�%-&+o

 �Z(�%-&��	+
o
s
(
-��	+(
as

(

(�9�(�~%-&~�qsb
%�(c
(+oe
+rof
 �Z(]
o
a
 �Z(_
%-&��	+
o
s
(
-��	+(
as

(

o
-��,o
�*�&{�*(�*"(�*"(�*:(�}�*>(�}�*&(�*�,-��*( +( +(�(g
oh
��*2(�s�*0:(i

(i
_(j
*0:(i

(i
`(j
*0:(i

(i
a(j
*(o
*~k
*>�]�]�*:�]o
*.sl
�k
*:(S}�*>(R}�*2{�s�*^{�(+om
�d*(�*"(�*"(�*b�+sn
(!+��*s�*v(!%-&rps�
z}�*{�*0*;sr
}(��sso
("+(#+*�(�~%-&~�vsp
%�($+*�-*(B
oB
(a
,*(�o�(%+*�-*3*oB
(B
(a
,*t?(�*0�<(B
o

(�oB
+XoA
 �Z
-��+o
s
(
-��+	(
as
(

o
-��
,o
�*d|
(�*"(�*0V=u�
,/u�,(&+*�(�
-+(B
s&z�(�
-+(B
s&zs�*Ro�(t
}u
*�(���-{u
o��+��*2{u
sv
*�*�sw
}�(!-rps�
z(�ox
*Jsw
}�(!*{�*0+>sw
}(��xso
("+o�*�-*(B
oB
(a
,*(�o�(%+*�-*3*oB
(B
(a
,*tB(�*0�?(B
o

(�oy
+Y(z
 �Z
-��+o
s
(
-��+	(
as
(

({
-����o
�*f~�(�~ %-&~�{sp
%� ($+*0&@o|

(�(��
,o
�*
0
+X
o
-�1
Xs
z*0.A�
+o
-s
zo}
�X2�*"(�*(�*0B(�
��o�*�(!-r#ps�
zo~
-(Gr#psS
z}�*{�*00C(�o�
-(�szuI,o
*>�s|%}$*z-*3*(�o�(C
*�-*3*oB
(B
(a
,*tD(�*2(�o
*(�*"(�*0&%('+
('+�]o~
o
��*v(!%-&r1ps�
z}�*{�*v-*3*(o(D
*�-*3*oB
(B
(a
,*tF(*2(o
*0,(o
(+��*2(o *:(�}�*>(�}�*v{�(+(+o�
�d*2{�s*{�*:}�(�*>}�(�*"(*V}�(�}�*Z}�(�}�*&(*N((<��*2(s*2(j
s�
*s�
*s�
*s�
*s�
*0iD-rps�
zo�o�
-(iszo
�4u�-u�-u.,�(pszo�o�
�*)
3'&KZ

*(o
*~�*�*(�
*(o
*.s%��*(�
*"(�
*�*s'*{�*:}�(�*>}�(�*V}�(�}�*Z}�(�}�*0^Es�
}%}&u-,+$(+��sn
((+��*��*�(�
oB
s&z2(+s.*(�
*"(�
*�*s2*:(!}�
*{�
*2(�
�]*"�s�
*0 %-*(�

o�
�]o~
*04F-*3*u�
-��(�
oB
s&z(�
*6u�(�
*�-*3*(�
(�
o�
o�
*�(�
�]-*(�
(�
o�
*:(�}�*>(�}�*��+s�
()+{�(*+�d*2{�s?*(S*"(R*>(+���*sC*(!*~�**uQ�*
*
*"�s�*.sG��*(�*"(�*b�+sn
((+��*sN*"(�*(�*0B(�
�oU*^~�o�
%-&*(�
*^~�o�
%-&*(�
*0,(Y,**:~�
(Z*0'G(`o�
o�
,o�,*Q*0Ho�

-*o�
(
�*�o~
/Q*o�
(+�sQ*Q*0YIs�
}--rOps�
z{--Q*{-o�
~�o�
��s�
(++(_*0�J}.}/}0{/-rOps�
z{.-Q*{0{/o~
20{.~�o�
-+(�
%-&{.o�
Q*{/{0X}0o�
.3{0{/o~
3Q*~�(b,*~�(b,*Q*~�*0�KrYp(�
��~�r�p(�
��~�r�p(�
��~�r�p(�
��~�r�p(�
��r�p(�
��r�p(�
��r�p(�
��r�p(�
��s�

~��_s�o�
~�rp(�
�^s�o�
~�r�p(�
�,+s�o�
~�rp(�
�]s�o�
~�rp(�
�-+s�o�
~�rp(�
�,+s�o�
~�rp(�
�,+s�o�
~�r!p(�
�,+s�o�
~�r'p(�
�,+s�o�
~�r+p(�
�,+s�o�
~�r1p(�
�,+s�o�
~�r9p(�
�,+s�o�
~�rIp(�
�,+s�o�
~�rOp(�
�,+s�o�
~�rWp(�
�,+s�o�
~�r]p(�
�.+s�o�
~�rcp(�
�.+s�o�
~�rip(�
�.+s�o�
~�rqp(�
�.+s�o�
~�ryp(�
�.+s�o�
~�r�p(�
�.+s�o�
~�r�p(�
�.+s�o�
~�r�p(�
�.+s�o�
~�r�p(�
�.+s�o�
~�r�p(�
�.+s�o�
~�r�p(�
�.+s�o�
��*0�L{.o�

9�o�
o�
+co�
(W
	,R{/{0		o~
(�
-7(`o�
o�
,#{/{0	o~
Xo�,�o
-��
,o
�Q**o�
:(o
}�*{�*06Q(d(V
o~
(�
-(do~
(Z**{�*:(o
}�*0M(fo�
%-&+,(�
�ms�
(/+�ls�
(0+o7
%-&(1+o7
*(h*�(fo�
%-&*(�
�ms�
(2+*�(fo�
%-&+(�
(3+(l*sc*0%H~�o�

,o�
r�p(
�**V(o
}�}�*{�*{�*b(rQ(q(
�*Roqoro�
*6~�o�
*6~�o�
*0~�o�
,*r�ps�
z0M~�o�
,*r�ps�
z0vNs�

�^(�
r�po�
�a(�
r�po�
�d(�
r�po�
�f(�
rpo�
�W(�
r
po�
��*{�
*N(o
o4+}�
*~�
*r~�
o�-(5+*o�
*05Os<
r�ps�
�](�
(wo�
&o�
��
*{�*r�s(�
(�us�s*N(�o�
o�
*:(�o�
*Js�
}�(o
*�(�
-rps�
zo.
}�(�(�(�*0�(�
..
+h(�*(�o
�(�(�-<(�o-
(�
,(�*(�o-
o�
(�(�o
&(�*(�o
-(�*{�*{�*"}�*{�*"}�*{�*"}�*0-(�,*(�
..+
*
*(�o�
*09P(�,*(�..+

+

+(�o�

(�*:(o
}�*{�*(�*(:*(5+*2(�o�
*0Q(�o�

o�
*6(�o�
*2o�s�*{�*{�*{�*{�*�(o
}�}�}�}�*�(�(
-
(�Q*(�(
-
(�Q*Q*Roqoro�
*"(�
*0?R}4}3(�
}2}1|2(6+|2(�
*0?S}<}=(�
};}:|;(7+|;(�
*z�w%(�
�%~��(D*s�*F~�o�(5+*0Cs<%r+ps�
%rmpo�
&o�
%r}ps�
%r�po�
&o�
��*"(�
*0GT}F}D}E(�
}C}B|C(8+|C(�
*0@Uo�
~A%-&~?��s�
%�A(/+(9+
o�
-*(�z0�Vs�

o�
+R(�
(Xo�
&o�
&r�p(_,&	t�(�
-r�po�
&	t�o�
&(�
-����o
�o�
s*
_ls�*0�Xs�

9�o�
+po�

(
(�,;��%rp�%(
�%rp�%�%rp�(=
o�
&+(�
(�(�
(
s�zo
-��
,o
�(�
rpo�
&(�
o�
o�
(�
rp(�
*|�
0�Yu�-ku�-cu�-[u�-Su�-Ku�-Cu�-;u�-3u�-+u�-#ud-u�
-u�,0��+( +Q*(?Q*-r�p+r�pQ*oB
o�
Q*(5+*Js�
%o�
��*"(�
*(5+*N(�
(�o�*Z(�
r�p(�(�
*(?*s�*"(�
*s�*0XZ}J}L}M}N}K(�
}I}H|I(:+|I(�
*0O[}X}Y}Z}[(�
}W}V|W(;+|W(�
*z�w%(�
�%~��(D*0?\}`}a(�
}_}^|_(<+|_(�
*0a]}i}k}f}g}j}h(

}e}d|e(=+|e(
*0j^}z}|}}}�}~}{}(

}y}x|y(>+|y(
*0O_}�}�}�}�(

}�}�|�(?+|�(
*0{s<%r\ps�
%rmpo�
&o�
%r�ps�
%rmpo�
&o�
%r�ps�
%rmpo�
&o�
%r6ps�
%rmpo�
&o�
��*{�*"}�*0?`}�}�(�
}�}�|�(@+|�(�
*(�
*{�*�(o
}���s�
(A+(B+}�*6{�s�*F(�o�
��*(�*2(�o�
*6(�o�
*{�*"}�*�(�(�
,s
(C+*(�o�*(�
*{�*"}�*{�*"}�*0Ga}�}�}�(�
}�}�|�(D+|�(�
*0%bs�
}�~���s�
o�
*0@cs�
}�~���
s�
(E+,��s
(F+(+*(�
*Fr�ps�
��*~�
*0Gd}�
}�
}�
(�
}�
}�
|�
(G+|�
(�
*($*f�%�](�
���
*{�*"}�*�(�(�
,s
(C+*(�o�*(�
*{�*"}�*{�*"}�*{�*"}�*{�*{�*(H+*{�*"}�*{�*"}�*0Ge}�}�}�(�
}�}�|�(I+|�(�
*(o
*{�*"}�*{�*"}�*0Of}�}�}�}�(�
}�}�|�(J+|�(�
*(K+*0mg-r�ps�
zo�
o�

+o�
(
(
(o
-��
,o
�o�(�
-r�po�(*'D
0ghr�p(�

o�
o�
,!o�
o�
tz%-&~�
o�
*o�
o
%-&~�
o�
o�
o
&*0?i}�}�(
}�}�|�(L+|�(
*>�s�%}�*(
*{�*"}�*{�*"}�*{�*"}�*{�*"}�*{�*"}�*0Gj}�}�}�(�
}�}�|�(M+|�(�
*(o
*{�*"}�*"(N*&(P*(M*�~�%-&~���s
%��(
*�~�%-&~���s
%��(
(-*{�*"}�*�-r�ps�
z(
(,o*{�*N(/oo	
*0�k(/o


8�(
(
o

oh
,f(
Qs
Q(
o

+8	�o
o
,oh
,Po
o
X	�i2��$(
:p������o
�QQ**��0Gl}�}�}�(

}�}�|�(N+|�(
*0Qm(4o

+#o
(5,{�{�o
�o
-��
,o
�o
*/?
0Cn(�
o�
+(�
(7(3(�
-����o
�*$4V{�{�(
�*0?o}�}�(

}�}�|�(O+|�(
*V(�
(�
(8*0!p(1-
�3*s�*Js
}�(o
*~�*�(
~�%-&~���s
%��(P+*(
*"(
*&( 
*R(
s!
(�
*>(
(�
*0hq-*o�

+A(�
(�
("
,(�
o
+(�
(�
s!
(�
(�
-����o
�*NY0rr-*o�

+G(�
(�
,6(�
o�
,((�
("
-
�.(�
o#
-
�(�
-����o
�*	*T`06ss<
,+o$
+o%
oAo
-��
,o
�**
(C*0cq-*o�

+<(�
(�
("
,#(�
o&
o�
-(�
('
&(�
-����o
�*IT0"t("
-s�

(�
o�
&*0�u,o(
-()
*s*

(�
+B(�
(�
o"
,(�
	o+
(�
o�
0
(�
o�
(�
-����o
�oR
+(S
('
&(X
-���uo
�*On��0!t("
-s�

(�
o
*.s<��*(H+*0Qvs,
%r�po�o�o�
%r�po�o�o-
��o�

�r%�s.
(C+*($*(5
*"(6
*N(�
(�
(6
*&(7
*R(�
(�
(7
*>�s�%}�*(*{�* 8���*0Hw}�}�}�(

}�}�|�(Q+|�(
*~�*�rp(�
rpo�
.r,p+~�
r0p(/
*07x}�(0
}�}�|�(R+|�(2
*0?y}�}�(3
}�}�|�(S+|�(5
*FrFpr^p(`*Frjpr�p(`*Fr�pr�p(`*fo-

1r�p*(_*^(�
,*rp(T
*^(�
,*rp(T
*�rp�%�%o-
���(6
(7
*0+(�
,r p*\o8

/r p*Xo�
*08o�

,.o�
o�
&o�o9
o�
o:
o�
*J~�}�(o
*0�zr�p��%r
p�s?��r"ps�
��(V
s;

r^p�[s<
o=
r6p�\s<
o=
rHp�]s<
o=
rVp�^s<
o=
rpp�as<
o=
r�p�_s<
o=
r�po=
��*~�*
*0C{o�o"
-s�

o�o�
r�po>
,	(k*(i*0?|}}(

}}|(T+|(
*0u�,��
�*�*0G}}}
}(

}
}	|
(U+|
(
*(:*07r�po>
,r�p(V+(T
*rp(�
rp(�
*(o
*nrDp(�
(?
s�
��*~�*�*0H~}}}(

}}|(W+|(
*0?s<
o@
+(A
(uoA(B
-����o
�*
"/Zr�prp(�
(�
*0)�(u-(:*o�-(:*o�*(o
*Fr�ps�
��*07�}"(�
}!} |!(X+|!(�
*(:*r�p*(o
*{�*�*{�*0P�}*}'}(})(

}&}%|&(Y+|&(
*0N�s<
o@
+$(A
(�oC
,	o}oA(B
-����o
�*
1>Zrp(�
r�p(�
*�~�}�sD
%r�ps{oE
}�(o
*Fr�ps�
��*{�*
*0G�}3}4}5(

}2}1|2(Z+|2(
*(:*0q�rp(�
sF

r�po>
,r�p(G
, o�
o�
&rpo�
&r�po>
,rpo�
o�
&o�
*J~�}�(o
*rr$p(�
(?
s�
��*{�*
*0H�}=}>}?(

}<};|<([+|<(
*(:*�rp(�
r|po�
.r,p+~�
(T
*J~�}�(o
*Fr�ps�
��*N(o
sH
}�*:(o
}�*N(o
sI
}�*j(o
s,
%o�
}�*
*V,r�ps�
z{�*:s
%}H*(�*�(o
%-&r�ps�
z}�%-&rps�
z}�*2(�(\+*6(�(]+*2(�o7
*(�*�{�-{�{�o�(^+}�{�*
*0�-s���
*s�
*(o
*�%-&r�ps�
z}�%-&rps�
z}�*2{�oK
*v{�{�o

s���*Ns%q�}K*(�*�%-&r�ps�
z}�%-&rps�
z}�*R{�{�o�*�%-&r�ps�
z}�%-&r�ps�
z}�*2(�(\+*6(�(]+*2(�o7
*(�*J{�{�o�*v�+s�
()+(L
�d*(o
*{�*"}�*{*"}*0L�(�-+%~N%-&~M�sn
%�N(_+
(�,(`+
(a+��*V}�}(o
*v�+s�
()+(N
�d*(o
*(#+*{*"}*{*"}*0r�� +s�
(+~P%-&~O�s�
%�P(b+
(�,&~Q%-&~O�s
%�Q(F+
(�(�
*f}rp}(o
*{*6s���*
*0s�o�
-*(�oO
,UP(;oP
++(Q

(
(;o
,(
Q�(R
-����o
�*+8cJsS
}(o
*V(o
}}*{*{*~(�oT
-(�o�
**�rp(�~S%-&~R� sU
%�S(c+(�
*�(-+(+%-&(d+}(e+,(sW
z*0L�,/(f+,'~V%-&~U�(sX
%�V(g+,(h+*(!sY

o7
8�o5
{�i�
+&{�o�
,	�+	�X{�i2�	oZ
-X{�isH
+{�	�o�
X{�i2�	��	}		o[
{-s\
}	o]
{to^
o
:����
,o
�o_
*J�;
{*"}*{	*"}	*{
*Z�s)%}Z%}\*0��s,

(�(�
-+(�(�
-(�o`
��
s�
(E+,*o7
+\o5
(�o�
,E	( +(�
-8(�	( +o>
,#(�
-(�o�
,
o�
o
-��
,o
�*Gh�
^(c
sa
}
(�*Z�s1%}b%}a*0C�sb

}c
�d
sX
(i+,r�po�
,(+*�s	*f lse
}(�*V(o
}}
*{*{
*�(�(G
,	o�
*(�Q*{*{*"}*
*0}�,7oK
1.(�(�
,*(���s�
s���*(�(�
-*(�(�of
-(�(���o�
(�s�*Js,
}(o
*"(�*R%��sg
(j+*(�*{*"}*{*"}*{*"}*"(�*0F�(�,(�(�+��sg
(j+
(�-*(�(k+oq*0��s,

o7
+}o5
(�oh
oi

+J(j
o�
,5ok
-s*
sl
om
t( +on
(o
-���o
�o
:x����
,o
�(l+op
+-(q
(
(�(
t(�
or
(s
-���o
�*('W~
��
�:�0N�s;
}d�m+st
(��=su
(n+(o+(p+�<sv
(q+*0��sr%s*
oo
(�ow
8�(x
(y
oz

+]({
o
(r+o.
+'o-
on(}
rp(T
o�
o
-��,o
�(~
-���o
�(
:g�����o
�*(V4�7j���(�*.s�
�*{*{*"}*Z�sK%}q%}s*vs�
}~}(�*{*J(o
s�
}*N(o
s�
}*�(�~v%-&~u�Vs�
%�v(s+*0��(�~w%-&~u�Ws�
%�wo�

+(�o�
o�
X2�2(�o�
o�
X
+(�	o�
o�
	X
	(�o�
2�*>}}*(o
*.s�*{*
*6s���*09�(o>
,
+(o`
(e+-
+Q*o�
*Js
}(o
*:((*{*"}*Z�sZ%}%}~*0 ,(o�
,
,( +*~�
*�oK
-(h+*��%s,
s��*(*>�sn%}�*(*0��o�
-sz-
�s*�s(�
(�
(@
�s�E�s(�
oB
s'z
�s(�
o�
	sz�s(�
s!z*( =W V- nX0L�s�

o7
8�o5
r�p(t+
	o�
-s�
	o�
r�p(t+o�
-m	r�p(u+rp(v+rp(v+r,p(u+rDp(u+rXp(w+rbp(w+rzp(t+swo�
o�r�p(t+r�p(u+r�p(v+r�p(t+r
p(x+s�o�
o
:�����
,o
�~�%-&~���s�
%��(y+*A

(�*0J~�%-&~���s�
%��(z+~�%-&~���s�
%��({+*0Y�~�%-&~���s�
%��~�%-&~���s�
%��(|+
%�s�
(}+*(�*>�s�%}�*(*�s�}s}(o
(6*{*{*"}*~*0O�}�}�}�}�(�
}�}�|�(~+|�(�
*0��s�

o�
+\o�
('-K((o�

+)	o�
oQoo�,o�
	o
-��
	,	o
�o
-��
,o
�*,5a

hu
0��
oP~�%-&~���s�
%��(+o�
+Fo�

oDo�oQoDo�oo�oo�(�o�
o
-��
,o
�*2R�
0\�s�
}�{�oP~�%-&~���s�
%��(�+(�+(��s�
(�+*07�}�(�
}�}�|�(�+|�(�
*0S�s�
}�{�o~�%-&~���s�
%��(�+��s�
(�+(�+*0�osO
(,*vs<oSoQoR(-*0��o�(.o�o�
oB

+oA
(.o
-��
,o
�o�o�
+N(�

	o�,>	o�o�
o�
+(�
(.(�
-���2o
�(�
-���0o
�*(7
q�M[�0I�-*o o.

+"o-
r�p(,	oFo
-��
,o
�*.>
Z�s�%}�%}�*0R�oQo�o�

+%(�
(1o�

	o�oT(�
-���0o
�*2C0'�o�
(�
,o�
s�(2*0Z�o�-*o�o[

+)(\
(_
oo�(]
o�
(`
-����o
�*6K0G�}�}�}�(

}�}�|�(�+|�(
*0G�}�}�}�(

}�}�|�(�+|�(
*0��s<
s�
o�
++o�

	ooA	ooA	oo�
o
-��
,o
�o�
+)(�
r�p��%(w�s?oA(�
-���7o
�oEo�o�o2*7J
\6�0�(!�^(�
��s�
o�(!�a(�
��s�
o�(!�d(�
��s�
o�(!�f(�
��s�
o�(!�W(�
��s�
o�*.s �*{�
*J(o
s�
}�
*N(o
s�
}�
*N(o
s�
}�
*0%�s�

}�
(�
��
s�
(�+*v-*3*(�
o�
(�+*�-*3*oB
(B
(a
,*t8(�
*2(�
o
*"(D
*.(D
�*0S�s�
} s�
}!s�
}"(o
o�

+o�
(Po
-��
,o
�*.H
{ *{!*{"*�(Io�
(Jo�
X(Ko�
X*
*�(I(J(K(�+(�+o�
*(N*0F�u�
-u�-u�-*(Jo�
*(Ko�
*(Io�
*�(Io�
(Jo�
(Ko�
*�(I(�+-(J(�+-
(K(�+**sI
z0I�u�
-u�-u�-+'(Io�
*(Jo�
*(Ko�
**{#*"}#*{$*"}$*{%*"}%*{&*{'*"}'*0��-r�ps�
z-r"ps�
z-r*ps�
z(\oJ(\oK(�+o�

+Lo�
(`,;o	u�-
u�
	-+o�o�
&+	o�o
o
-��
,o
�*KX�
08�(�+(f(�+(�+
(e(�+
(g(�+
*�o,oo�-
(bo�
**&o�
*bo(�cs�
(�+*>�s�%}�*0F�o
o�(�
o�o�
�_
(b(+o�
	``*0:�
(\oJo�
+o�
o�
o
-��
,o
�*.
��s�%}�%}�%}�%}*v�s�%}
%}%}	*Js�}&(o
*�(o
})}+}*}((�
},*{(*{)*{**{+*{,*v(o
%-&r4ps�
z}�
*{�
*B(�
o�
�*Js�
}�
(o
*�s�
}�
(o
-rFps�
z(�
o�
*{�
*(�
*"(�
*0%�s�

}�
(�
��
s�
(�+*s�
*(�
*"(�
*0%�s�

}�
(�
��
s�
(�+*s�
*{0*{/*V}/{/(�*{1*"}1*{2*"}2*{3*"}3*{4*0��s�
}{-rZps�
z(%-&{o8~%-&~��s�
%�o�
{o:{��s�
o�
&*"(�*&(�*0��-r�ps�
z(�
,(jrdpsS
z(�o�
Y
+4(�o�
(�u�,o[o�,	*Y
/�(�
(f(�
s�zv�s�%}%}%}*Z�s�%}!%}#*0=�(o�
,"o�
(�+(�
,
o�
,*rtps�
z�s�
}0s*
}1s9}4(o
*:(o
}A*{A*:(�(C
*z-*3*(�o�(C
*�-*3*oB
(B
(a
,*t�(�*J(�%-&*o
*(�*�s�
}�
(o
%-&r�ps�
z}�
*2{�
o�
*2{�
o�
*{�
*0O�s�

}�
{�
��
s
(�+- (�
(e{�
�](�
s
zo
*J{�
o
o
*R{�
(
o
*�{�
~
%-&~
�
s	
%�
(�+o

*(
*N{�
(
o
*z{�
�
s

(�+o
*~{�
�
s

(�+o
*2{�
o
*0%�s

}
{�
�
s
(�+*0u�-r�ps�
z/(Os�
z(
Xj�j1(OsW
z
{�
o
+(
o
�~(
-���\o
�*D"f0(�s

}
{�
�
s
o
�*0%�s

}
{�
�
s
o 
*R{�
(
o!
*6{�
o"
**jo#
($
o%
(�+*0?�s'

}(
{�
�)
s
(�+-	�~*o
�~*2{Do*
*
*2{Do+
*2{Do,
*6{Do-
*:{Do.
*0�Q{Do/
,	o0
**0@�-r�ps�
zo1

+o�
o,(�o
-��
,o
�* 5
n{D(2
(3
o4
&*2{Do5
*6{D(�+*sI
zsI
zJ{Do,
o6
*N{Do,
o7
*sI
z0P�-r�ps�
z-r�ps�
z{D~-%-&~,�s8
%�-o9

o:
*2{Do;
*F{Do,
o<
*o<
*>{Do4
&*6{Do=
*sI
z:{Do/
*^(V
s>
}D(o
*0
(o
%
}?
}@
*0'�(o
%
}?
}@
%}A
}B
*0D
(o
}B
}A
(C
�](D
�](D

`}@
`}?
*{B
*{A
*{@
*{?
*z(C
�]-(D
�]�**r(C
�](D
�](D
*0�ue
,(E
**0d-*3*(C
�]oC
�](D
,:(D
�]oD
�](D
,(F
oF
3(G
oG
�**0��(C
�]-+(C
�]o

 �Z(D
�]-+(D
�]o
a
 �Z(F
(H
a
 �Z(G
(H
a
*0�
(C
�],;(F
-(C
�]o~
�+(C
�]o~
��+
,H(D
�],9(G
-(D
�]o~
�*(D
�]o~
��***0��(C
�](D
�](D
,/(C
%q]�]-&+�]o�
%-&~�
*s�

(F
-(+[o�
(C
%q]�]-&+�]o�
%-&~�
o�
,o�
(D
%q]�]-&+�]o�
%-&~�
o�
(G
-)+]o�
&o�
*J(o
sI
}J
*N(o
sK
}J
*�(o
-r�ps�
z�iXsL
%oM
}J
(N
oO
*~(o
sL
%sP
oM
}J
*�(o
sI
%sQ
oM
}J
*{J
*�(N
~R
%-&~S
�T
sU
%�R
oV
*04�sW

}X
(N
oY
,(N
�Z
s[
(�+**"(\
*&(�
*No�
o]
(�*0�u�
,(�**2{^
o
*V{^
{^
(
�*"(�
*�(o
}P}Q}R}S}U}T*{P*{Q*{R*{S*{T*{U*0��-*(�,(�o�_o��+
(�,(�o�%-&~�
o@
+(�,(�o�%-&~�
o@
+(�,(�o�o_
+
(�,(�o�_o��+(�,(�o�o@
+__	___*0t-*3*(�o�(D
,T(�o�(D
,A(�o�(D
,.(�o�3 (�o�3(�o�(D
**�-*3*oB
(B
(a
,*t�(�*0�(�-+(�o

 �Z(�-+(�o
a
 �Z(�-+(�o
a
 �Z(�a
 �Z(�a
 �Z(�-+(�o
a
*08�(�(�s�
s(�(`

��o�
(�*�-r�ps�
z(�
(�o��,o�(�
*0F(�%-&+o;%-&~�

-+o�-+o�%-&~�
si*�((�
,
(I(�z}V*{V*Zo�(�(G
�*Zr�p(�r�p(T
*N(s!
}W*{W*�(�o�o�
-o�,o�(�o�
***�r�p(�
oa
ob
r�p(�
(�(�
r�p(T
*0,�(,sc

(Isd
((oe
*Z�s%}6%}5*B(}X*{X*04�s�%(�o�%o�%o�%($o�
o�
*6(o�*R()(o�*>('(*{Y*"}Y*(o
*B((
*{Z*"}Z*v(	o,
(o�**(o
*(o
*~[*Z-r�ps�
zo�*V-r�ps�
zo�*.s�[*(o
*~\*Z-r�ps�
zo�*V-r�ps�
zo�*.s�\*(o
*~]*Z-r�ps�
zo�*V-r�ps�
zo�*.s�]*(o
*~^*Z-r�ps�
zo�*V-r�ps�
zo�*.s�^*(o
*~_*Z-r�ps�
zo�*V-r�ps�
zo�*.s"�_*�sf
}`(g
-r�ps�
z((oh
*{`*0E�-rmps�
z((oi

+(j
ok
(l
-���po
�*60��-*3*((om
o(om
.*((oi

+P(j
o(oi

+(j
o
,�(l
-���po
�,�(l
-���po
�**I$m1]��-*3*oB
(B
(a
,*t�(**Z((-*((o
*�(o
-r�ps�
zo~
-(Gr�psS
z}a*{a*�-r�ps�
zo�(.on
*0+-r�ps�
zo�(.o�
,*(H*z-*3*(.o.(C
*�-*3*oB
(B
(a
,*t�(1*2(.o
*(o
*~b*�-r�ps�
zo�oo
,op
1o�oq
*V-r�ps�
zo�*.s4�b*(o
*~c*Z-r�ps�
zo�*V-r�ps�
zo�*.s9�c*(o
*~d*Z-r�ps�
zo�*V-r�ps�
zo�*.s>�d*(o
*~e*�-r�ps�
zo�or
,�,o�o
*j-r�ps�
zo�(+*.sC�e*(o
*~f*Z-r�ps�
zo�*V-r�ps�
zo�*.sH�f*(o
*�(o
%-&r�ps�
z}s
%-&rps�
z}t
*{s
*{t
*��]-r�ps�
z(u
(v
(u
ow
ox
oy
*�-*3*(u
ou
(D
,(v
ov
(D
**�-*3*oB
(B
(a
,*tr(z
*z(u
o
 �Z(v
o
a*�(o
%-&r�ps�
z}{
%-&rps�
z}|
*{{
*{|
*0O��]-r�ps�
z(}
o~
o


+o
(�
o�
o
-��
,o
�*%D
�-*3*(}
o}
(D
,(�
o�
(D
**�-*3*oB
(B
(a
,*tu(�
*�(}
-+(}
o
 �Z(�
-+(�
o
a*:(�
}�
*{�
*(�
*0W�-*3*(�
�]u
,!(+o�
�]u(+(�+*(�
(�
o�
o�
*�-*3*oB
(B
(a
,*ty(�
*F(�
(�
o�
*
*(�
*
*s�
zsI
zrs�
%smo�
%s�
o�
*(�
*{l*"}l*"(q*Z�s&%};%}=*(�*
*sI
z0*�o�
3	o�+*s�

o�+o�
*(�
*
*s�
z0c�(�+
o�
.o�+�~o�
+/o�+
+	�|�~o�
	X
	�i2��~�]*(�
*{|*"}|*{}*"}}*{~*"}~*{*"}*{�*{�*"}�*0m(}-(�(lrp(�z(}o�

r(p(:
-r>p(:
-	+(�*(�*(�(n(}(�z0q({-(�(o(�z(�-({((�s�*(,(�(krPp(�z({(�(�s*0Y�(�,(�(m(�z({u�
-(�(I({(�zo�((�s�*Jsf
}�(o
*
*j(�
(Sr�p(�
s�
z0����%�(�s�%o�
8���%�(�o�
t�r�p(:
-)rp(:
-,r�p(:
--r�p(:
-7+L(�o|+Oo�
o~+Ao�
&o�+o�+*o�
&o�+o�+o�(�oe
o�
,
o�

@:���o�*0�o�+s�

s�
*0�o�+
sc
sd
*0�o�
t�
o�
&( i;o45C ��$5 ���; ��$;�8� H�`2.^ ҿ�2;� i;o4.u8� Vf�5 �癛;� Vf�.@8t ���;� f���;� ���;�8Nr�p(:
:�89r�p(:
:�8$r�p(:
:�8r�p(:
:�8�r�p(:
:�8�rp(:
:�8�rp(:
:�8�r&p(:
:�8�r:p(:
-8�r*p(:
-z8�(I(�*((�+*((�+*(?(�+*(#(�+*(:(�+*(5(�+*((�+*((�+*(D(�+*s-(�+*0l�o�
&��%	�%�(�o�
.	3#o�
t�
s�*o�+s�*(Xo�
��rJp(�z(�
*
*j(�
(Srlp(�
s�
z0^�o�

.	.Y6*+.o�+s�*��%o�
( +�s�*~*��%	�%�(�z(�
*
*�Ш(�
(>
-�(�
(>
**0K�o�

.	3��%o�
o�
�*o�+*(Vo�
��r|p(�zj(�
(Sr�p(�
s�
z(�
*
*j(�
(Sr�p(�
s�
z0:�o�

.	3(�*(�*(_o�
��(�z0'�~�o�
,-(W(�zo�
*0	7�(�

r�p��%�(�+(�o�
o�
*0o�
t�
(�*(�
*
*0.���%	�(�-sA+
o�+o8*j(�
(Sr�p(�
s�
z(�
*
*j(�
(Sr�p(�
s�
z0J�o�
..
+)o�+
+'o�+�j,sO+(H
+	o�+
s*(�
*
*j(�
(Srp(�
s�
z0��o�

YEJSASS&/SSSS8+Q(�*(�*(�*(�*(�*(�*(�*(�*(�*(Vo�
��rp(�z��s0%}G%}I%}K%}M*v�s9%}U%}S%}W*0�o�+
s�*z��%�(�o�+s�
*(H*z��%
�(�o�+s�
*v��%�(�o�+s�
*0D��%	�(�o�
t�
(�
-o�
@3
o�
s�*s�
*Z�sA%}\%}^*v��%�(�o�+s�
*0Bo�
&o�

3(H*o�+
o�
&o�

3*
(�s�*0��sI
}b}c{bo�
t�}a{ao�
@3oJs*~�{ao�
-{b(W{a(�z{bo�
&{b{c(�(�+o�
*(�
*
*j(�
(Srp(�
s�
z0s�o�
3o�+s�
*o�
.	(�*(�

r,po�
,$o�

	o�
&	o�
s�
*o�
(�*0��
o�
	3?o�
t�/o�

o�
/3	/s�*	1c	o�
�+
o�+-,o]
�c�c(�
-o�
o]
`s�
s�*(�
*0M-�](�
(�
+	u]�-(�
(a�](�
(�
s�
z�]o�
*0W��
-'u]-(�
(b�](�
(�
s�
z-�]+	�]�o�
�]*F�](�
o�
*Fo�
,(�
**6(�
(a
*(�
*
*0T�-s�+
o�
&+2o�
u�o�
&s+o�
o�
&o�o�

3�*j(�
(Sr4p(�
s�
z(�
*
*j(�
(Sr�p(�
s�
z0��(�

r�po�
-(Pr�p(�zo�
.(Xo�
����(�z(�+(
	 ��U25 	 �&.J	 ��).f	 ��U2;�8�	 Xy)G5	 XCjE.4	 Xy)G.n8�	 X˖G.R	 ���.;8�r�p(:
-e8�rTp(:
-]8�r\p(:
-U8�r�p(:
-M+sr�p(:
-H+drp(:
-C+Ur
p(:
->+F(�+*(�*(�*(�+*(�+*(�+*(�+*(Y(�+rnp(�zR(|o�
(�*0D�-r�ps�
z(�

�*&(�
�&(�
�(�z(�z*4	�	#�	.
�	8
�05�(�

�*(�z(�z
	(�z(�z*4		
�	
�	
�	'�0��r1p(�
r�p��%�(�+r�p��%�(�+(�
-	(�+(�

	o�
s�%o�%o�
o�o�
o�
*0b�r1p(�
r�p��%�(�+(�
o�

	(�
uqo�
o�
o�
o�
*0:�(�+
o�
�so�
r1p(�o�
�so�
*(�
*
*j(�
(Sr�p(�
s�
z0	��o�
.	;�8�(�

r�p��%�(�+rtp��%�(�+r�p��%�(�+
rp��%�%�(�+	s�*o�
u�s�*s�
z(�
*
*j(�
(Sr�p(�
s�
z0G�o�

..	3(�*(�*(�*(`o�
��(�z0o�
t�
(�*0'�~�o�
,-(W(�zo�
*0	7�(�

r�p��%�(�+(�o�
o�
*0�o�+
s*(�
*:(�
}�
*{�
*6o�
o�
*0V�o�
	.@"s�
*o�
t�
~�
o

oh
-(Yr�p(�zo
rpo
oh
,!o
rpo
o
o�
[�+o
rpo
oh
,!o
rpo
o
o�
]�+
o
r4po
(�
o
r>po
oh
,o
rJpo
(�
+	_-(T�](�z	sQ
*(Vo�
��r�p(�z0^��]oh
,L(�
o
o�
�
	u�-	u�,�	�-(Yo
r�p(�z*(&BrVps\
��
*0G,
oN
oY
-o�
*oN
oY
3oN
o�
o�
*oN
o�
*zo�
.(�
s�
*s�
*Z�s�
%}�
%}�
*(�
*(�
*"(�
*&(�
*�(�
}�}�}�*{�*{�*{�*�-+o�
%-&~�
u�(�*0G�
,3o�
,+o�

o�
(�
(z����(�
s�*R(�
(�
(�*Z(�
(�
(�*Z(�
(�
(�*b(�
(�
(�*b(�
(�
(�*0/�s�
%o�
%o�
%o�
%~�o�

(�
*0B�o�

-(P(�zo�
.(Xo�
����(�z*0K�o�

--(P(�z�s*o�
(�+/(P(�z(�+*0R�o�

--(P(�z�s*o�
(�+/(P(�zo�
o�+*ro�
��o�
-(�z*�(Xo�
��r?p(�+(�*6-	(�z*:-
(�z*B-(�z*0���%s��%s��%s��%��
s�
s�
�%s�
�%s��%s��%s��%s��%	s��%
s��%s��%s��%
s�
���s�
%rIp~m�Ys�
o�
%rSp~m�Zs�
o�
%rcp~m�[s�
o�
%rop~m�\s�
o�
%rup~m�]s�
o�
%r{p~m�^s�
o�
%r�p~m�_s�
o�
%r�p~m�`s�
o�
%r�p~m�as�
o�
%r,p~m�bs�
o�
%r�p~m�cs�
o�
%r�p~m�ds�
o�
%r�p~m�es�
o�
%r�p~m�fs�
o�
%r�p~m�gs�
o�
%r�p~m�hs�
o�
%r�p~m�is�
o�
%r�p~m�js�
o�
%r�p~m�ks�
o�
%r�p~m�ls�
o�
%r�p~m�ms�
o�
%r p~m�ns�
o�
%r# p~m�os�
o�
%r5 p~m�ps�
o�
%r; p~m�qs�
o�
%rA p~m�rs�
o�
%rG p~m�ss�
o�
%rO p~m�ts�
o�
%rc p~m�us�
o�
%rs p~m�vs�
o�
%r p~m�ws�
o�
��s�
%r� p~m�xs�
o�
%r� p~m�ys�
o�
%r� p~m�zs�
o�
%r� p~m�{s�
o�
%r� p~m�|s�
o�
%r!p~m�}s�
o�
%r!!p~m�~s�
o�
%r/!p~m�s�
o�
%rM!p~m��s�
o�
%rY!p~m��s�
o�
��s�
%rk!p~m��s�
o�
%r�p~m��s�
o�
%ru!p~m��s�
o�
%r�!p~m��s�
o�
%r�!p~m��s�
o�
��*0,�,' ŝ�
+o�
a �Z
Xo~
2�*.s��*(o
*Z*f(o
}�(�
}�**0��{�
,	;�*}�{�(�+,*{�o�
��}�{�~�%-&~��s�
%��(�+}�}�+e{�+#{�o�
{���(�
X{��i2�{�}�}�*}�{�
	X}�{�{�2�*{�*s�
z{�*07�{��3{�(�
3}�
+s
{�}�*(
*(o
*N{�
o�
o�
*.s
�
*(o
*o
*2o
t�*f(o
}
(�
}
*0{

�.3
�(
�*0K�{
,;
�1}
s
}
{
{	
}�
{
{�
~

%-&~
�
s
%�

(�+(�+(~

%-&~
�
s
%�

(�+(�+o
}
�}
+k|
(

	{
{
%-"&{
{
�
s
%}
(�+(�+{
(�+}
}

�2�}
|
(
-�(
|
��
�(
�*ABBf}
|
��o
*{
*s�
z2{
�]*0C�{
�3{
(�
3}

+s

{
}	
{
}
*(
*(o
*z|b
(k
�~�~o
*(o
*z|i
(g
�]�]o
*.s#��*(o
**ut�*.s&��*(o
*2o�o�*f(o
}�(�
}�*00{�
�Y63�..��(,�(+�*!(0��{�{�,;	
�`}�((o
-
�E((o 
}��}�8�|�(!
}�|�("
o0}��}�8�{�o

(�
~�%-&~��'s#
%��(�+(+{�|�($
	(*(�
o�
o�(�
o�
o�s }�}�
�^�}�{�o
:S���(,}�|���|�(%
:����(+|���
�()�*Axxf}�|���o
*r�}�{�,{�o
*{�*s�
z{�*0C�{��3{�(�
3}�
+s(
{�}�{�}�*(0*:(o
}�**0��{�
{�,.a*}�}�+f(-{�o�
o�
1=(-{�o�
(.{�o�
s&
}�}�*}�{�X}�{�(-o�
2�*{�*s�
z2{���*(o
*0P{�o
r�po
o
o
r�!po
oh
-+o
r�!po
o
(<*.s;��*(o
*o�
*(o
*b{�
('
{�
o(
*(o
*b{�
('
{�
o(
*(o
*b{�
('
{�
o(
*V(o
(E(G*{�*"}�*{�*"}�*0B{�-3(F%-&+(Do�o�
%-&(Do�}�{�*(o
*Jo�{���*0w�{�
,t;�{�-r�ps�
z{�o�}�{�-d�()

(*
(+
-?%
}�}�|�(�+�{�|��C%
}�(-
{�o.
.�{�o.
,.l+j{�o/
o0
(1
(2
->%
}�}�|�(�+�h{�|��F%
}�(3
{�� �}�}�|�(4
��}�}�|�(5
*A4; &6|�(6
*f(o
}�(�
}�*0{�
�.3
�(P�*0��{�,.Q
݅}�{�o=
}��}�+>{�o<
u7
	,	}�}�
�;�}�+{�o7
{�o
-�(P}�
�(N�*��n}�{�,{�o
*{�*s�
z{�*0C�{��3{�(�
3}�
+sM
{�}�{�}�*(T*(o
*�(�
(uo�(�
{�o�{�o�sW*0i�{�
{�9�sV
	{�}�s8
{�((�+	�Ws9
(�+(�+}��-�7%~#�(o	{�s){�}�(m��s:
o�+o;
		(<
(=
->%
}�}�|�(�+�~{�|���%
}�(?
{�o@
}�{�� 
�}�}�|�
(A
��}�}�|�(B
*A- &6|�(C
*.s[��*(o
*o�*0V�{�
{�,a;�s�
}�{�o+o~oD
(E
(F
-A%
}�}�|�(�+��{�|���%
}�(H

	}�.:{�o,~�%-&~��\sI
%��(�+oJ
}�.8�{�oK
.h{�}oL
{�{�(looM
		(N
(O
-A%
}�}|�(�+��{|��%
}�(P
{o@
}�"

{�(�,
{�o@
�{�o
:����/{�,{�o
�}��/{�,{�o
�}�{�� �}�}�|�(Q
��}�}�|�(R
*Ad���"&����S� &6|�(S
*0��{
{9�(�- (�,{(�oo�-{8(��9{(�oo�,{(�oo�-C(~s'%{(�o(�oo�o&(�(���,S(�{(�ooT
(U

(V
-?%
}	}|(�+݂{
|��%
}(X
(��'u�-	u�,�(�(����}|(Y
��}|(Z
*A4��D'&_m&6|([
*(o
*6{(�*.sd�*(o
*
*.sg�
*(o
*"('
*"((
*.s\
�]
*(o
*"s^
*0��{_

{`
9�;�{a
-r�!ps�
z{b
-r�!ps�
z(�{a
o+~c
%-&~]
�d
se
%�c
of
}g
{g
oh
o0
(1

(2
-?%
}_
	}i
|j
(�+��{i

|i
�F%
}_
(3
.L{b
{a
ol
om
(n
(o
->%
}_
}p
|j
(�+�w{p
|p
��%
}_
(q
�1/{g
or
&��}_
}g
|j
(s
��}_
}g
|j
(t
*A4�{bes &6|j
(u
*.sp�*(o
*"(]
*(o
*6{o*.su�*(o
*o *(o
*6{o*.sz�*(o
*o *f(o
}!(�
}#**0<�{!
{$,.*}!(�}"}!*}!*{"*s�
z{"*07�{!�3{#(�
3}!
+s|
{$}$*(�*(o
*b{%{&(+(<*f(o
}v
(�
}w
**0{v

,*}v
*{x
*s�
z{x
*0+�{v
�3{w
(�
3}v

+s�

*(y
*f(o
}*(�
},**0{*
,*}**{+*s�
z{+*0+�{*�3{,(�
3}*
+s�
*(�*(o
*�~�{-~�o�
%-&+(�
([*03�{1
{469{3(�
,s*
��s*
}5(z
r�!po�}69�;�{6oE

	r�!poF
	{3oG
{6oH
	oI
&{6o{
o|
(}
(~
-A%
}1}8|2(�+�[{8|8��%
}1(�
}7.u+*{7o�
-{5{7o�
o�
o�
{7o�
o�
		(�
(�
-A%
}1}9|2(�+ݳ{9|9��%
}1(�
:`����/{7,{7o
�}7�/{6,{6o
�}6{5� 
�}1}5|2
(�
��}1}5|2(�
*AL��L���� &6|2(�
*0�{:
{<,G{=(�o�
(�
(�
->%
}:}>|;(�+�_{>|>��%
}:(�

	s���}:|;(�
��}:|;(�
*|�&6|;(�
*.s��?*(o
*>r	"p(
�*F~�r"p([*0�{B
{F,\{D{E(�
(�
	o�o�
(�
(�
-A%
}B}G|C(�+�B{G|G��%
}B(�
~@%-&~?��s�
%�@(b+(�
s�
		~�(�

�%~�s�
�s�

o�
&+/
o�
+o�

(�
o�

o�
3�
o�
&
o�
3
o�
(�
~�(�
-�(�sg�9/
,
o
�/	,	o
��}B|C(�
��}B|C(�
*AL��b��rt�&6|C(�
*0�{H
{J6;s�
}O(z
95(z
{K-r)"p+ry"po�}P9�;�{Pr�"p{L(>&{Pr�"p~�
(>}Q{Pr�"p~�
(>}Rs
}S{L{M{S{Kr p(�o0
(1

(2
-?%
}H	}T|I(�+ݏ{T
|T�F%
}H(3
{So�
}U;�8�|U(�
(Y
(Z
{N{O{P{Q{R(�o0
(1
(2
-A%
}H}T|I(�+��{T|T�F%
}H(3
|U(�
:P����/|U��o
�|U��}Q}R}S�/{P,{Po
�}P{O� �}H}O|I(�
��}H}O|I(�
*ALG�N�>Xf &6|I(�
*0�{V
{X9�s
}\{Y{Z��%\�o�
r#p(�
{\{[r p(�o0
(1

(2
-<%
}V	}]|W(�+�g{]
|]�F%
}V(3
{\� �}V}\|W(�
��}V}\|W(�
*�� &6|W(�
*0�{^
{`,7(z
,{a~�o�-�9(z
r)"po�}b,C{br�"pr
#p(>&{br�"pr3#p(>
{br�"pru#p(>,I{bo{
o|
(}
(~
-A%
}^}c|_(�+ݣ{c|c��%
}^(�
o�
�[/,o
�		u�-		u�,��1/{b,{bo
�
�}^|_
(�
��}^|_(�
*Ad
�� &I�:DR&6|_(�
*0�{d
{iC�;�{f*o8
/{g{h{fo
8B{fo�
}ls
}mX
+	X
{fo~
	1{f	o�
\.�{f	o�
}n(z
{j-r�#p+r�#po�}o,~;�{or�"p{k(>&{or+$p{l(>&{oo{
o|
(}
(~
-A%
}d}q|e(�+�q{q|q��%
}d(�
}p;�{po�
9�+J{po�
u�,3{l{n(�
{h(�
	{m	o
{po�
o�
(�
(�
-A%
}d}r|e(�+ݖ{r|r��%
}d(�


:@����/{p,{po
�}p�/{o,{oo
�}o{mo�
}s.v8�|s(�

{k
(Z
{g{j
(Y
(�o0
(1
(2
-A%
}d}t|e(�+ݛ{t|t�F%
}d(3
|s(�
:[����/|s��o
�|s��}l}m}n��}d|e(Y
��}d|e(Z
*Adx�S��t��U��&6|e([
*(o
*Nr;$p{uo�
*.s��v*(o
**o
�*0�{x
,Is�}�{�{z}u{{{|oG
s�
}�{}o.
}�,g8�{�o-

	{~{{�(�o0
(1
(2
-A%
}x}�|y(�+�{�|��F%
}x(3
{�o
:j����/{�,{�o
�}���+s�
{�(�+~w%-&~v��s�
%�w(�+{�{u(�
-{���s�
(�+{�o�
�'�}x}�}�|y(Y
�!�}x}�}�|y(Z
*A4T����'&6|y([
*0P{�
,i;�s�
}�{�{�oG
{�o{
o|

(}
(~
-?%
}�}�|�(�+��{�|���%
}�(�
}�;{�o�
98�{�o�
.
.48�{�s
%{�{�o�
(;o�
o�
+W{�o�
~�
.{�o�
(;+{�o�
(;{�s
%{�o�
o�
{�o�
o�
(�
(�
-A%
}�}�|�(�+ݩ{�|���%
}�(�
:���/{�,{�o
�}�{�o�
1{�{�o�
� 	�}�}�|�	(Y
��}�}�|�(Z
*A4�6� &6|�([
*0�	{�
{�,L{�(�o�o�
(�
(�
->%
}�}�|�(�+�d{�|���%
}�(�

	r[$ps���}�|�(�
��}�|�(�
*��&6|�(�
*V(o
}�}�*v{�(:
,
{�Q*Q*.s���*(o
**o
�*sI
*0|
{�
{�,/(�-s
�<s�
}�(�o�
}�,,8V|�(�
}�|�(�
o�
}�9�8�|�(�
|�(�
{�(�(�
{�(�(�
{�(�{�(�ono�
(�
(�
-A%
}�}�|�(�+�]{�|���%
}�(�


		o�
1
{�	o�
|�(�
:
����/|���o
�|���|���|�(�
:�����/|���o
�|�����+s�

{�	(�+~�%-&~���s�
%��(�+~�%-&~���s�
%��(�+s�
� 
�}�}�|�
(�
��}�}�|�(�
*ALqqAp�2@ &6|�(�
*(o
*0<,o
o�
1 {�o
o�
o
oT
-o
*( +*(o
*6{�(�*0�{�

{�
,{�
o4+
,N{�
	{�
o�
oT
(U
(V
->%
}�
}�
|�
(�+�~{�
|�
��%
}�
(X
�?(^rypo�
(T
o�s�z�}�
|�
(�
��}�
|�
(�
*|�&)��&6|�
(�
*0G{�
{�9�(�(�
ux
	-({(�o�
sOz(�	(�
	{�o�%-&+o�o�
	{�o�%-&+o�o�
	{�o�%-&+o�o�
	{�o�
	o�
oT
(U
(V
->%
}�}�|�(�+�X{�|���%
}�(X
��}�|�(�
��}�|�(�
*A&6|�(�
*0�
{�
{�,q{�-ri$ps�
z(�,E{�o�o�32{�o�o�(�
-{�{�o�o�o�{�o�}�9�s�
}�(�}�}�8�{�{��
{�{�o�	{�o{�}�{�(o�
(�
(�
-A%
}�}�|�(�+ݺ{�|���%
}�(�
{�o�
}�{�X}�{�{��i?#���}�{�o�
s.
�1/{�,{�o
��}�|�(�
��}�|�(�
*A4� ���&6|�(�
*0�{�
{�,I{�o{
o|
(}
(~
-A%
}�}�|�(�+݄{�|���%
}�(�

	(%�s�
(�+(�+�'/		,	o
��}�|�(�
��}�|�(�
*� ���&6|�(�
*f(o
}�(�
}�**0\{�
,.8*}�{�o�
,){�o�
,{�}�}�*}�{�o�
-�*{�*s�
z{�*07{��3{�(�
3}�
+s�
{�}�*(�*0�{�
{�,M{�{�o#oT
(U
(V
->%
}�}�|�(�+�p{�|���%
}�(X

(,(	o�

	��}�|�(�
��}�|�(�
*��&6|�(�
*.s���*(o
*o*o*z}�}�}�}�*0q{�-Jo��${�{�s@}G{�{�s@}Ho�
(�
*{�{�{�{�o*�{�%-&+{�{�o%-&(:*0.{�%-&+o
{�%-&+o(�
e*(o
*.s���*0�{�
{�9�{��7s�
(�+(�+
+	o�
{�(3	X
	o�
2�~�o�
{�(6o0
(1
(2
->%
}�}�|�(�+�R{�|��F%
}�(3
��}�|�(Y
��}�|�(Z
*��&6|�([
*0�{�
,{�o�
}�,V+w|�(�
{�(�o0

(1
(2
-?%
}�}�|�(�+݅{�|��F%
}�(3
|�(�
:y����/|���o
�|�����}�|�(Y
��}�|�(Z
*����&6|�([
*.s���*(o
*o�
*f(o
}�(�
}�**0�{�
,.b*}�{�o�
-*s,
+"{�o�
{�o�
o�
X{�o�
2�}�}�*}�{�o�
-�*{�*s�
z{�*07{��3{�(�
3}�
+s�
{�}�*(�*0{�
9;�{�~�o�-Z~�s={�o�oE{�o��${�{�s@}G}Ho�
�J{�o�{�|�o"
-'s�
}�{�o�{�{�o�
{�o�+}�{�-��{�(Yo�
(�
(�
-A%
}�}�|�(�+��{�|���%
}�(�

	}�{�o�o�(b}�r{$psF
}�{�rpo�
&{�o@
}�;�8�|�(A
}�~�{�o�
9~-+#{�{�{�o�o�o�
%-&{�}�{�o�
}�{�9�}�{�(Zo�
(�


(�
-A%
}�
}�|�
(�+�u{�
|���%
}�
(�
		{�{�o�
&{�{�o�
&{�{�{���(c{�{�{�r�p(c{�{�r�$p(c{�r{$p(~
rp(~
Xo�
}�}�|�(B
:J����/|���o
�|����<�}�}�}�}�}�}�|�(Y
�6�}�}�}�}�}�}�|�(Z
*A4��j��<&6|�([
*0�{�
,Q{�r
#pr�$pooo�
(�
(�
->%
}�}�|�(�+�g{�|���%
}�(

	o
(V
s
��}�|�(
��}�|�(
*��&6|�(
*0
{�
,m{�r
#pr�$p{�(�
��%r%%p�ono�
(�
(�
-A%
}�}|�(�+ݕ{|��%
}�(�
o�
1o
r%%po	
-+o
r%%po
t�o�

	��}�|�(

��}�|�(
*��&6|�(
*0{
6+{o�+-��{or
o�},^;�{r;%po�
{o{
o|
(}

(~
-?%
}	}|(�+�u{
|��%
}(�
};�+A{o�
u�{o�
(�
-(j,{o�
&{o�
,s{o�
o�
(�


(�
-A%
}
}|
(�+ݡ{
|��%
}
(�
		:0����/{,{o
�}�/{,{o
�}��}|(Y
��}|(Z
*AL���7����&6|([
*0X{	
,+{o�+-�&{or
o�}9�{r�%po�
{oE
r.&poF
{
oG
{oH
oI
&{o

o
(
(
-A%
}	}|
(�+ݍ{|��%
}	(

	,{	( +o�
&�/{,{o
�}��}	|
(Y
��}	|
(Z
*A46�
$+&6|
([
*(o
*Z(�
{(
�*.s��*(o
*^(�
%-&+(�
�*^(�
%-&+(�
�*0,{
9�s�{}{o�{|o"
-'s�
}{o�{{o�
s
}s
}{o@
8�(A

	(u9�{o�,s{	o
{o�{%-&��s
%	}	(+

(�
,	s!
+{	s
o
(B
:Y����/
��o
�{~%-&~��s
%�o
}8L{{o


(�
}{{o
{o�o�


(�
(�
-A%
}}|(+�6{|��%
}(�
,{{o�
&{o
+"(
(�
%-&+{(
&(
-��/
��o
�{{o 
}{~%-&~��s
%�o
}{<�����.�}}}}|(Y
�(�}}}}|(Z
*AL��4>/m��.&6|([
*0�{ 
,{"o�+o�}#,V{#r:&po�
{#o

o
(
(
->%
} }$|!(+�y{$|$��%
} (

	��o
�1/{#,{#o
��} |!(�
��} |!(�
*#����&6|!(�
*0{%
{*9�{'o�{(|+o"
-'s�
}+{'o�{({+o�
s
},{)o@
8)(A

(�	oC
-H{(��%	�s?{'o��$}G}Ho�
8�o}{'o�-W{(��%	�s?{'o�oE{'o��$}G}Ho�
+Zo�
	+2	(�

(
(�
o�
,{,	
(�
o�
+		(�
-��/
	��o
�(B
:����/
��o
�s*
}-8�{-o!
{,o�
}.9�85|.(�
}/|/(�
o�
:(�|/(�
o"
{'o|o�


(�
(�
-A%
}%}0|&(+ݐ{0|0��%
}%(�
,{+|/(�
o�
&{-|/(�
o�
{,o�
+!(�
(�
|/(�
o
&(�
-��/
��o
�|/��|.(�
:�����/|.��o
�|.��{-oR
+(S
{,o'
&(X
-��/
�uo
�{,o(
=����.�}%}+},}-|&(Y
�(�}%}+},}-|&(Z
*A�M?�p<��.
�R=l$���.&6|&([
*0{1
6~{3o�{4|6o"
-'s�
}6{3o�{4{6o�
{3o�+9d{5r�po#
(�
o$
o�}79,;S{7r�&po�
{7oE

	r='poF
	oG
{7oE
r]'poF
{5r�po#
,{5r�po#
oG
+Er{'p(
-,{3o�o�3{3o�o�oG
+~�
oG
{7oH
	oI
&{7oH
oI
&{7o{
o|
(}
(~
-A%
}1}9|2(+�F{9|9��%
}1(�
}8.h+{6{8o�
o�
o�
&{8o�
o�


(�
		(�
-A%
}1	}:|2	(+ݫ{:	|:��%
}1	(�
:m����/{8,{8o
�}8�/{7,{7o
�}7� �}1}6|2(Y
��}1}6|2(Z
*AL������� &6|2([
*0{;
,c{=o�{>|@o"
-'s�
}@{=o�{>{@o�
{=o�+9|o�}A,Y{Ar�'po�
{AoE
}B{Br�'poF
{AoH
{BoI
&{?o@
}C,n8�|C(A
}D{B{DoG
{Ao

o
(

(
-?%
};	}E|<(+��{E
|E��%
};(
��,{@{Do�
&}D|C(B
:B����/|C��o
�|C��}B�/{A,{Ao
�}A� �};}@|<(Y
��};}@|<(Z
*AL���nP��� &6|<([
*:(o
}F**0< {F
{H,.*}F{�}G}F*}F*{G*s�
z{G*:(o
}I*0{I
�.3
�(�*0�!{I,.a
݇}I|K{�o7
}L�}I+;{Lo5
|K{�s���}J}I
�-�}I{Lo
-�(}L
�(�*��n}I{L,{Lo
*{J*s�
z{J*.s�M*(o
*�*.s�O*(o
*�*o%
*.s�R*(o
*fr(p(
(
(&
*~T*(o
*6('
o(
*2('
o)
*.s"�T*.s'�U*(o
*�*f(o
}W(�
}Y**0B"{W
{Z,.$*}W{[(�}X}W*}W*{X*s�
z{X*0C#{W�3{Y(�
3}W
+s)
{Z}Z{\}[*(/*f(o
}](�
}_**0�${]
{b,	;�*}]s,
%r(p(*
{`r;(p(+(+

(,
i��o�
%rg(p{`r�(p(+{(+

(,
i��o�
%r�(p{`r�(p(+��o�
%r�(p{`r�(p(+��o�
}^}]*}]*{^*s�
z{^*0C%{]�3{_(�
3}]
+s1
{b}b{a}`*(7*(o
*0$,r)po�
,t�{-
o
**(o
*6{ds�*0^&s>
}f{d|f(}
o�
,-~*( +}e|f(y
�?s.
(	+(
+*(o
*0I's@
}ho
(r+(+}g{eo/
(+�As0
(+*(o
*0�(sB
}i�
+s1
{g�Cs2
(+~l%-&~k�Hs3
%�l(+(+(+{h|f(}
�+s4
(+*(o
*0D)sD
}j{io
{jo
o5
(+�Es6
(+(+*(o
*J{jo
s7
*.sG�k*(o
**o8
�*(o
*0,|m(9
o�
-**f(o
}n(�
}p*0{n
�.3
�(N�*0e*{n{q,;
�D}n(�{roo9
}t�}n8�{to8

(�o:
8�sI(;
}m	{|m(9
of
,!r#)p|m(9
r[)p(T
sz	{�Js<
(+	{|m(9
|m(=
o�o�
(>
:a������o
�	{}o}n
�0�}n{to
:���(N}t
�(L�*A4h�\\n}n{t,{to
*{o*s�
z{o*0C+{n�3{p(�
3}n
+sK
{q}q{s}r*(R*.sU�u*(o
*o?
**o?
�*(o
*n{y({x(
�*f(o
}z(�
}|*0{z
�.3
�(]�*0�,{z{,;�
��}z{}�s�
(+(c
(+
	o.
}��}z+wsX}y{�o-
}xs,
%({xo�
{}�YsX
(+s}{}z
�0�}z{�o
:y���(]}�
�([�*��n}z{�,{�o
*{{*s�
z2{{��*0C-{z�3{|(�
3}z
+sZ
{}{~}}*(a*(o
*6{���*.sf��*(o
*o�*Fo�,o�**o�*Fo�-o�**o�*o�*o�*f(o
}�(�
}�*0{�
�.3
�(q�*0*.{�,;�
�}�{�(oA
}��}�8�{�oB
sc
	~�%-&~��gs�
%��(+~�%-&~��hsC
%��(+}�	{�-O	~�%-&~��is�
%��(+~�%-&~��jsC
%��(+}�	{�-0	~�%-&~��ks�
%��(+(+}�	�dsC
(+(+( +9�s,
%r�)p{�oE
o�
%r�)pr�)p~�%-&~��ls�
%��(!+(�
o�
%r�)pr�)p~�%-&~��ms�
%��(!+(�
o�
}�}�
�0�}�{�o
:2���(q}�
�(o�*A!!n}�{�,{�o
*{�*s�
z{�*07/{��3{�(�
3}�
+sn
{�}�*(u*0_(o
}�}�}�}�}�}�}�}�	}�
}�sF
}�*{�*{�*^(yrp(x(T
*{�*{�*{�*{�*{�*{�*{�*{�*{�*0s(�~o%-&~n��sG
%�o("+~p%-&~n��sH
%�p(#+~q%-&~n��sI
%�q($+*0s(�~r%-&~n��sG
%�r("+~s%-&~n��sH
%�s(#+~t%-&~n��sI
%�t($+*0s(�~u%-&~n��sG
%�u("+~v%-&~n��sH
%�v(#+~w%-&~n��sI
%�w($+*0P(�~x%-&~n��sG
%�x("+~y%-&~n��sJ
%�y(%+j*07s,
%r�p(xo�
%r�po�
%r�)p({��o�
%r*p(}��o�
%r*p(|��o�
%r!*p(�(+o�
%r7*p(�(+o�
%rW*p(�(+o�
%ru*p(zo�
%r�*p(���o�
%r�*p(~��o�
%r�*p(��o�
%rXp(��do�
%r�*p(��do�
%r�*p(�o�
*�(o
}�}�}�}�}�*{�*{�*{�*{�*{�*(o
*b(K
|�(L
o�*.s���*(o
*0*0s�
}�|�(M
��sN
(&+*:(o
}�*F{�r�p(t+*F{�r�*p(t+*F{�r!*p('+*F{�r7*p('+*�(�~{%-&~z��s
%�{(+*�r�)p(�(O
r�)pr�)p(�(O
(T
*F{�r�)p(u+*F{�r*p(u+*0sr�)p(�~|%-&~z��s
%�|(+(�
r�)pr�)p(�~}%-&~z��s
%�}(+(�
(T
*�(�~~%-&~z��s
%�~(+*0@r�)p(�(�((+~%-&~z��s
%�(+(�
*0�1(�o�(:
-(�()+,
o�()+-*(�o�(*+,(�o�(*+,*(�o�(*+
(�o�(*+,-((�o�(:
-(�o�(:
,*.*(�o�(:
,(�o�(Q
**.s���*(o
*Jo�o�(�
**(++�*2r�p(t+*s�*.s���*(o
*�~�%-&~���s�
%��(!+*o�*o�*f(o
}�(�
}�**0I2{�
,	;/*}�{�(~�%-&~���sR
%��(,+s!
sS
{�(+
+`X+K	�	�o�,6	�o�o�
-
	�oT
	�o�o�
-
	�oT
X	�i2�X	�iY2�( +,ps,
%r�)p{�oE
o�
%r�)pr�)p~�%-&~���s�
%��(!+(-+(�
o�
}�}�*}�*{�*s�
z{�*073{��3{�(�
3}�
+s�
{�}�*(�*0f4{�
{�E��{s�
}�{�o{�(!{�{�os�}�{�()o�
(�
(�
-A%
}�}�|�(.+ݾ{�|���%
}�(�

	-0{�o(}s�{�o�
{��2{�(*}�s<}�{�oU
	+	(V

{�
oRoA	(W
-��/
	�o
�{�o�{�{�o2o0
(1
(2
-A%
}�}�|�(/+ݥ{�|��F%
}�(3
{�{�{�(/o@
(�sX
{�oU

+
(V
(0
(W
-��/

�o
�{�{�(3o0
(1
(2
-A%
}�}�|�(/+��{�|��F%
}�(3
{�{�{�(&o@
("{�o�{�o{��5�}�}�}�}�}�|�(A
�0�}�}�}�}�}�|�(B
*AL,(T8�5&6|�(C
*.s���*(o
*2oDo�*2oHoK
*o�*(o
*6{�s�*0�5{�
,){�o�+-+o�9,o�}�9�{�o�o�
	E	FFFFFFF+D{�r�*po�
+9{�oY
{�o�o�o�
{�r�+po�
+ݮ{�o

o
(
(
->%
}�}�|�(0+�|{�|���%
}�(
����5/{�,{�o
���}�|�(�
��}�|�(�
*A44;PW&6|�(�
*(o
*6{�(+*f(o
}�(�
}�*0{�
�.3
�(��*0�6{�,;*
��}�sp
}�}�8A{�{�{�oZ
oRo�:	{�{�ot
{�o�o[
}��}�8�|�(\
{Gs=
	{�{�oZ
oRoG	o(
1v(~s'%{Ho&{�{�oZ
oQ~�
{�o�o�{�o�o�(�}�}�
ݦ�}�|�(]
:=���(�|��{�X}�{�{�o^
?����{�ow
{�ox
+(y
{�o_
({
-����o
�
�(��*A4�#���f}�|��o
*{�*s�
z{�*0C7{��3{�(�
3}�
+s�
{�}�{�}�*(�*0�8{�
,Y;�{�{�{�(4o0
(1
(2
-?%
}�}�|�(1+�&{�|��F%
}�(3
{�o`
0��{�oa
}�.W+y{�ob

	{�o�o0
(1
(2
-A%
}�}�|�(1+݃{�|��F%
}�(3
{�o
:w����/{�,{�o
�}���}�|�(Y
��}�|�(Z
*A4��<V]&6|�([
*09{�
9�sc
{�oa
+/ob

	{�o�{�o�o�,od
o
-��/	,o
�{�{�(5o0
(1
(2
->%
}�}�|�(2+�R{�|��F%
}�(3
��}�|�(Y
��}�|�(Z
*;Z��&6|�([
*(o
*6{�
o�
*f(o
}�(�
}�**0�:{�
,.k*}�{�u,oe
u�,rof

	u,aog
}�}�+5{�{��}�}�*}�{�X}�{�{��i2�}�*{�*s�
z{�*07;{��3{�(�
3}�
+s�
{�}�*(�*f(o
}�(�
}�*0{�
�.3
�(��*0�<{�{�,.w
ݝ}�(\oIoh
}�}�+Q{oi

{�	{�{�(d,+	(U(Wo}�}�
�-�}�{o
-�(�}
�(��*��n}�{,{o
*{�*s�
z{�*0[={��3{�(�
3}�
+s�
{�}�{�}�{�}�{}�*(�*(o
*(o
*b{{{o*f(o
}(�
}*0{
�.3
�(��*0�>{{
,;�
��}s�}{{}{
o%
}�}+os�
	{}	{o$
}(\oK	��sj
(3+	{�ask
(4+}}
�-�}{o
-�(�}
�(��*��n}{,{o
*{*s�
z{*0O?{�3{(�
3}
+s�
{
}
{}
{	}*(�*(o
*6{�
o�
*(o
*6{�
o�
*(o
*{*.s��*(o
*sl
*f(o
}(�
}*0{
�.3
�(��*0�@{{,;�
ݯ}{(+}{(�o=
}�}+Q{o<

{	o�(V
(5+-	o�{o�
,	}}
�-�}{o
-�(�}
�(��*��n}{,{o
*{*s�
z{*0OA{�3{(�
3}
+s�
{}{}{}*(�*f(o
}(�
} *0{
�.3
�(�*0MB{{!,;
�,}(c
sW

(c
sW
(�o�
Y+'(�o�
(�{"	o<Y/�(6+(�oR
+#(S
(�{"	o=(X
-���uo
�o=
}$�}+C{$o<
		o�%-&+{"on
,	}}
�-�}{$o
-�(}$
�(�*A4�0�DDn}{$,{$o
*{*s�
z{*0CC{�3{ (�
3}
+s�
{!}!{#}"*(*(o
*boo
%-&*{�
o�
*.sp
�
*(o
*o
*(o
*0 Do

{
�~�~o
*(o
*0 Do

{
�~�~o
*(o
*0 Do

{
�~�~o
*(o
*boo
%-&*{(
o�
*.s�,*(o
*s+*.sq
�S
*(o
*or
*(o
*6{X
os
*f(o
}1(�
}3*0{1
�.3
�( �*0�E{1{6,.\
݂}1{4o%
}7�}1+;{7o$

(		o,	o�
	}2}1
�-�}1{7o
-�( }7
�(�*��n}1{7,{7o
*{2*s�
z{2*0CF{1�3{3(�
3}1
+s
{6}6{5}4*($*f(o
}8(�
}:*00{8
�Y63�..��(*�()�*!(0G{8{;E�K
�V}8(n-
�@s,

{<o7
}>�}88�{>o5
}?(noR
}@�}8+}|@(S
}A{?{A|Bo�
,E	{Aok
,#	}9}8
ݡ�}8s,

	{A{Bo�
}B}A|@(X
:s���(*|@�u}?{>o
:���()}>	ot
1	}9}8
�}8
�('�*Avvn}8{>,{>o
*j�}8|@�uo
*{9*s�
z{9*0CH{8�3{:(�
3}8
+s&
{;};{=}<*(.*f(o
}C(�
}E*0{C
�.3
�(3�*0�I{CE%v
ݜ}C{F}D}C
�~}C{H{J{L(�oB
}N�}C+&{NoA
}D}C
�-�}C{No
-�(3}N
�(1�*��n}C{N,{No
*{D*s�
z{D*0[J{C�3{E(�
3}C
+s0
{G}F{I}H{K}J{M}L*(7*f(o
}O(�
}Q**0t{O
,.+*}O+F{R{To�+}P}O*}O{To�
-{T(U(�z{To�
{V3�*{P*s�
z{P*0OK{O�3{Q(�
3}O
+s9
{U}T{S}R{W}V*(?*f(o
}X(�
}Z**0�L{X
E7~*}X{[o�
.){]{[o�+}Y}X*}X+j{]{[o�+}_}`+3{_{`�}Y}X*}X{`X}`{`{_�i2�}_*{Y*s�
z{Y*0CM{X�3{Z(�
3}X
+sA
{\}[{^}]*(G*(o
*0N�s�
}�*f(o
}u
(�
}v
**0O{u

EN�*}u
{w
o�
.A	@�{x
{w
o7+or
:�}y
}u
*}u
8�{x
{w
o8+}z
}{
+3{z
{{
�
	}y
}u
*}u
{{
X}{
{{
{z
�i2�}z
+'{w
(V{w
o�
��r�,p(�z*{y
*s�
z{y
*0CP{u
�3{v
(�
3}u

+s�

{�
}w
{�
}x
*(|
*.sX�m*(o
*s3*s(*s*s3*s(*s*"s*s-*"s/*sD*sO*s�*N�}
s~
s@*N�
s~
s
*N��
s~
s@*N��
s~
s
*N��
s~
s
*N��s~
s@*N��s~
s@*N��s~
s@*2s(s�
*2s3s�
*V�H%s�sD*2s(s�
*2s3s�
*V�H%s�sD*Z�H%s�sD*s�*N��
s�
s�*s�*"s�*s�*s*s*s*s*s�*s�*s�*s�*s�*s�*0Q����*s�*s�*s�*.s��n*(o
**o��*o�*o�*o�*o�*o�**o��*o�*o�**o��*o�*.s��z*(o
*
*
*
*
*
*f(o
}�(�
}�**0�R{�
{�E)\*}�{ao�
s�}�}�*}�{bo�
&{c{bo�+}�}�*}�*{�*s�
z{�*07N{��3{�(�
3}�
+s�
{�}�*(�*BSJBv4.0.30319l�a#~b̙#Strings��,#US�(#GUID�(��#BlobW��+	�3����e���R�r-�f8�R-F�w!G�w�G�wNE�vZx@F�[]F�[{E�[�F�[�G�[UG�[nG�[�E�[�F�w,E�w�G�T�E�K>��TB�T�E�w���T�D�w�9�ToL~��9L~F�v��T
�t
����(t���a�Tt��T}��t]U�]]��}#a�Th��pM�}�

�M��
S����G�v�

�|UTy�fy�f�bkfy�l�b�E�w]0b�W�T�^0b�_�T�@�T@�w�9�w�j�D��9�w�j$�w��w#�j��e�G�T
T\���P�|�g�w��T�k��F�b�U�T�TK�d['�[G�TRa�T�a�T�b�TXj0bg40b�D�hE�vWh�w�d�Z|D�QbE�QH�b�~�}�P�T��T��T�?�T�9�Tn6�eR:�e��e�D�eD�Tb��T�O�T�F�[���e
]���]�:f0bp{;STfyaf;S
gZ��f4�Gj�^K�b�e�}�=t�T��t

�T�E�QHK�b�U�T�j\�t\�}�B�}��[+�t�F�b�#�b3K�b.[�bAG�b��T$�T�f�bk�b=l�b�U�bx�T؂�e�U�et��[@a�T�`�TR_y�^ye^y�a\�f`�b�d�b�{�baA�e�^�T�9�eM�T�g�T2�T�t�}�e�T^�_�T:�Ti9�T�
�Q���Tga�T�a�T��e	��Q�d�[�U�T�R�T���T3H�T�9�T?�T��T2H�T':�T>�T1�T��T9\0b4�w�9�T�i�T�e�h�e�_�To�T*K���Q;S \�8j�0�L~\�}���w3L�Th_.:�T�d�Z+`�T�t�T�9�T�}�e�^ywK�bi��TIO�T_�T�7�e�@;StOy���b�~L~�iL~�[�}Q�R��I�����I䔔������/R��I	�>R��I6��IIi��I�i����y��IDm����K��I �g��I'J���I-���I3͓��I7���IC_���:O m��IW�����I!`@��I#h��T)�+m��I+���K��0��[m��0���D��0������0������0��rn��0�y���T0��R��I2��i��I9�m��I:��D��I@��B��G�W6��II��Q��IP��h��IT� ;_���U� �`���U��i��IV�sn��IV��A��I^
 �a���d
 E`���d a���d �^���d ~a���d �_���d#���Id)6m��Ig.��|��Ik9�w�xImCOP)|Io���O)|~��6)|I~�QX�}���w�}I��I�}I���W�}L��X�}��Y�}$���X�}���
�}V��� X�}$���8Y�}���X�}$����
�}��]�}$�1Y�}��X�}��>Y�}I�ki�}I�"�X�}v�'wX�}�+�X�}v�2
�}$�64X�}�?Y�}L�CaX�}$�G�X�}�N�!Y�}�R�FS�|I�V��|I�c���|I�f��S�|�n0��|I�p�|�u�'
�|I�z�]S�|������|��Ԙ�|I����S�|���f�|����S�|I����S�|��G��|I���S�|�����S�|���S�|�����S�|���S�|���iS�|���T5Gw�����GwI��b5Gw����5Gw����Gw���95Gw���F5GwI���5Gw����5Gw���fGw���5GwI��`Gw��%}�Gw��*?7GwI�/ �[Gw��:{5Gw��J}_Gw��Mr5Gw��R�g$vI�T�g$vI�fCg$vI�plg$vI�x�[g$v�|g$vI�!g$vI���f$vI��]��I��n��I����N�����N����N�I������������������������vI����vI����vI���v���vI�wN�{I��{I��h�{t��N�{��N�{�O�{I��M�{I���M�{�BN�{�.N�{��M�{I��e�{�Vi�{I�M�{I�h�{t
i�{t�N�z��N�z�O�z�N�z��yg�uv�uI � ��Y8��YI>�[�YI Hl��YI#U�K�YI(i
�YI-o��
�YI.r�
�Y�/w�
�Y�/{�J�YI/�#P�Y5�t]�YI5��c�YIA���
�YB�I�YIB��[�YID���YIE���YII�:d�Y�J�d�YIJ�P�Y�V�uB[V�$uB[W��8B[X��]B[X��4:B[$Y�7uB[IZ�ZB[Z�J
B[I[�mB[I[�mB[I\�mB[I]ymB[I^�mB[I_"AUB[2`'nB[Ia-nB[Ib4SnB[Ic9�mB[Id>-nB[IeC?nB[IfH��B[gM��B[gO�B[gP�7
B[IgQ�B[IgS�B[IiZ\
B[^kaq
B[^lg.lCbfli�MCbln\lCbjms�CbnmwhCbIm{�kCbz��KlCb~���lCbY��SkCb����kCb���lCb����kCb���olCb�����CbY��lCb���jkCb���ykCb����kCb���qCb����Cb����`Cb����RCbI��ZI�!dI��I�xI�!�I��I��I��I� !dI�"!dI�%LI�(�I�2I�8!dI�:lI�=�I�?%I�A�lI�C�I�I]�K�I�M;I�V��X!dI�Z��]�_�Ia!dIc!dI
f!cI
jlm�o!dIo�Ir!dIt�Iw!dIy�I!|�I%��I'��I*��l�-�yI-�k.��1�\:�!dI?�>B�yH�~V�^�C	d�*Iu�!dIv��x�*������?I��!dI��P��lI��:I����������3���I����!dI��
�R��jI��l�����!dI��oI��
	��P�����W��	�xI�!dI�^) 5%b1�;!IF
�II!dIM!dIO!dIR�iIT!!dIU&�IW)I]1LIc9%Id;�
Ie>�Ig@�IiB�IjD!dIkF�ImI�InK!dIuT�IxX�IzZ�I�c!dI�e}I�n
K4�w�dI�w-WI���I��!dI���|I��!dI��!dI��}I��'	��!dI��I�����%I��g	I�����k��xI���I���I���I�I�I��I��I�kI�!dI�VI��I�lI%!dI&
�I(
kI)BI*�I+!dI,!dI.lI09I1�I8&+IC0�IO9�IXA�IaI�C�dK`IdO!dImWcn�!dIn�!dIz�� I��V�ݖ�!�.�!XetV�=�V��n�V��n�2G/�!�%�!�(L!�(�!�'"L!�,'L!�.,L!�03L!}2=L!�2IL!Xe�6��ULQ��V�21�c*�'�!Xe�!�-�!�/YL!�(bLD1�!�(L!�(�!�'"L!�%�!�0gL!�,'L!�2qL!�%�1/PbL!�3uL!�*zL!3-Y
!t3L!K3L!�$j!�(V!�%�!�(L!�0gL!�1�L!�,'L!
3�L!�.�L22�L$%8$!�%��+�L!�0�L�*�L!O\�L1<%�L!�%�!x0�L!�(L!�(�!�'"L!�,'L!�%�!�(L!�(�!�'"L!�(�! 4�L!�,'L\���b�!�1�L!+�L!�3�L!�.�!y.�L!�*zL!(3L��
V��Y�LV��K�LV��P�L!�2�L!t&��%�'"Lx*�L�+�*+�L�&�+�L�)���
V�N@"LV��l"LV�mC"LV�e"LV��e"L!�|�L!(3L!�1�L!�(�! 4�L!�1�L!�,'L1i@�L1�Y�L�U�L�B�L�?��+��&��(�!�.M�$8$)�L!�/
MI+M�1MX&��*�L!�0 M�%ULa.+M!#&�!A.�!�00MS(;M!_0@M1<%�!�EM!�/QMV��;�!Zua!�)ZM!(*�!�*cM!�YhM!�+wMS�r��21<%|M!�+wM!�'!�YhM1<%�M6o6�M6cT�M6�T�M6xT�M1pT�M6T�M6�u�M6�u�M6wu�MV�Z;�V�9;�V�);�Q����21�/�M!J2�M!c2�M!&�!�'�M1Te�MV�T�V��R�V��R�V��O�V�옺!z)19c�!4�M!�&�M�,�M (8$e)�
!+�L!!$�!=$�M!U$�!q$�M1���Q�ʒ�1�{�MQ�[!�Q�@D�Q�@D�Q�K��Q���Q�\��Q�5��1���S��;��2�!�;�!�/�M�2��3�M<%8$1�c*1���3��1�M�&�S(;M!}1�!D1�F'�M�*�T�a<��2�M�'8$�1�M�&�S(;M}1�D1�G/��%�!4N1:4�V�-��Q��I�Q��1���1kc*1CN!,*Q��;�1kc*V�-��1kc*V�vI�1kc*!,*!4"NQ��<�Q��<�1kc*!,*V�-��1kc*!,*!�z-N!#O2N!u7�LC97N!u7�L!#O=N!#O=N!u7BN!#O2N!u7�L�18$L)8$V��n��)8$�-�!�,GN!�3BN!�$�qy�M]*�@*�!�,VN!UI_N!(*�!�'�M!�&-N5(�1��dN�,qN�)8$*�!�,�NN-�N!�)�Nх-NW�N6<��N!�,VN&�!�3uLg-�N1<%�N!�,F!=0�N!)/�N!0�N�%�x*�L�*�L!�.�Nl/�N!�%�!�(L!�(�!�'"L!�,'L!�(� !b1Fe��N!�0�N
1�Nx*�L�%�!q%�N��
V�N@�LV�@�LV��4�LV�~C�LV���LV�8C�LV��C�LV�fC�LV��6�LV�C�LV�Lz�L!V%�!Xe�!!l,�!!Xe�N!�1!�1!�18$!28$!/y$S��>�S��>�S�E>�S�0>�S��>�S�>�!x*O!�)O!j'"L!,,O!I,O!*+�L!�$�!�/
M!�$��1�M'.O1<%O1<%#O1<%(O1<%-O1<%2O!�)7O!t&�1<%EO1<%JO1<%OO1<%TO1<%YO!�-�%!�)�%!�-@&!�)K&!�'�/�NV��?�V�)>�V�?�V��=�V�V>�V�k>�V�D?�V��>�V��=�V�W?�V��=�V�?�V�A>�V�*A�V�A�'.O,'��1�M�-�M!�)7O-q*Q�E>�Q��V�2Q��V�V�E>�V��>�V�?�V��?�V��V�V��V�V�=V�V�SV�V�iV�V�,V�V��V�V��=�V�h?�V�2?�V�}>�Q�E>�V��{�2V�
|�2V��;�V�<�V�<�V�$<�V��;�1�c*!�-�)!j(�!�,�
!�+�
6�^O67xdO6KxzO6$x�O3��O3��O6��O��O�D�
H��L!�
� �O� �Os�L	�
��
�}�CO,6��+��+�	,�D�
H�!�
�}��}���+�n��n��>,ș���6��O��O6��O3�O�D�
H��O!�
�{�Oa7�N\7�N��O1�O��O�D�
H�P�{PO�
I�qL6�P� P�{��T�{��T�{��I��L6)(PS(;M�Q�L�D�
5h-P샆LW�LE7Pq�/�D�
H�bL!�
��<P��<P�#EP�#EP�OP샆L�D�
5hXP샆L�|<P�{ePiP�iPEqP6�~P��P�D�
5h�P�{eP(�^
�iP �LE�P��P{iPq�P�D�
5h�P�{(Pe6�EV5ș(P6��P3�P6��P��P�	�P6�b/��/�D�
5h{
(�^
�Bc
�{Y
?�/E�/q�/m�M��M6��P�Q\qL6�Q�Q\qL6�%Q�Q�D�
H��!�
�{*Qm�M�{/Q�D�
H��!�
�D�
H��!�
(��M(��MyO����
�D�
5h4Qے��{@Q��N�EQ�JQEOQqYQ�D�
5haQ�{@Qے�EkQ6�wQ3|Q��Q�D�
5hے�~��{�QEkQ�D�
5h�Q�{�Q�68$�I�Gd�|y,L8�Q�EQ��QZ�Q"VNE�/z�Q�D�
5h�Q�{�Q�I�Gd��68$VNE�/�D�
5h�Q�{�Qe6�1EQEOQ�D�
5h�PGd��VN�=��{�Q�68$�I�+�OVN��$EQ
JQEOQqYQz�Q��/�=�6��Q��Q�D�
5h�P�=��j�QqO�|y�Q�4EQ�j�Q��Q���Qh�Q��ME�/�D�
5h�P�j�Q�?��4EQ=e�Q��QBJQEOQqYQ�D�
5h�SR�{REkQ!su�!�;�6�R�Q2R�D�
5h�{*R~��S/Rh�Q�4RGR{ZREgR~�~��D�
5he6��{�~�EV5�D�
5h�{yRe6�~�EV5�D�
5he6��{~R�S�R~�1EQl�R��M{�
��RE�R�D�
5h�R�4EQ�{~REOQ�D�
H�JQ!�
�fJQ�fJQ�D�
5h�{�Re6�~�EV56��R��R��R&-��&�g�R&ÁVNTY
M6�6�R�D�
5h�P���{�Ne6�E�/�D�
5h�P�|�Re6���RE�/6��R3�R�D�
H�-N!�
�fJQ�fJQ�D�
5h�Pe6�1��bY
M�
M/R�
M2�0�RE�RzS?���8$q
S�D�
5hS�S/RES�D�
5h-S�S/Ry6�EgR�D�
5h�Pe6��z
M1EQBJQEOQqYQ�D�
5h�Pe6��z
M�?�1EQE5S1��=S6�PS�
US�US�D�
5h�P1��e6�bY
M
M�hS�zSE�
=�EYQ�D�
5h�Qe6�1EQE5S�D�
5h�Pe6�1��bY
M�{�S
M]�S��N{�S�SEYQ�D�
5h�Pe6�1���{VN�
M�EQ�JQEOQqYQ�D�
5h�Pe6�1��bY
M�
M�EQ��Q{S��E5S�D�
H�BN�{�S�D�
H�BN�{�S��S6��S�S6��S�|Q��P6��S�S1<%�S6��S��S�D�
H�BN!�
�{Tu7�Lp7�L�D�
H�BN!�
u7�Lp7�L�{T1��ҕBNI��l
T�y�N�T�MT3<�6�#Ti(T�l:T�D�
H�BN!�
�{ETu7�Lp7�L�JT6�STQXT�bT�?��{lT�D�
H�qT!�
u7�Lp7�L�{lT��M\evT6�{T��T�	�TI�T��T4�T��T"�T�D�
H�-N!�
	{�T{�T��TV��:�V�-=�V��|�V��|�V��]�V���V��I�V�B�V�2z�V��=�V�MJ�V�E"�V��t�V����V�e�!�%�!�%�!�38$!'�T!�'8$!.�T!%8$!.1�T!�,�T!d+�!�/�T!�%�!�$8$!)�T!>&�!
(�T�d�T6��T3�T!(�BN6��T��T 
�T�	Uz
U6�U�	�T�$UI�T�D�
H�-N!�
	{�T{�T�D�
5hXP(�8U,]�L�{�N3ZzL�iP��<Us�EYQq�/6�DU�IU�SU]U��L�D�
5h�Qe6�1EQE5S(�8U�D�
H��O!�
e6�`6���<U��<U�gU�
�nU�D�
5h�Pe6��|xU=��E�/��U�D�
5h�P�|xUe6�)��E�/�I�D�
H��!�
�8�U�8�U��M��
�D�
H�bL!�
�{�U샆L烆L1w
M,w
MW{
MR{
M��U샆LUPbL��U�D�
H�bL!�
샆L烆Lu7�Up7�U��U�{�U��U�I�I�T�N6��U@�U�D�
H�L!�
2{�Q-{�Q�{zL샆L烆L��M�OP�D�
H�L!�
�{zL샆L烆L�OP1�6��"�y"�T��T��T�1�6��U@�U6��$��$�I�D�
H�bL!�
u7�Up7�U�{�U��U�D�
H�BN!�
�{�Uu7�Np7�N��S}BN��UM���M�D�
H�cM!�
�TcM�TcM�fq*�fq*�lv*�lv*�U�U�U�U��U�D�
H�cM!�
�lv*�lv*�fq*�fq*�U�U�U�U�D�
H�cM!�
�fq*�fq*�lv*�lv*�V��
�7��fq*�lv*�D�
H��@!�
�fq*�fq*�lv*�lv*��@��
6�V6�V�V�
V�$V�VuV
$V�V�	Vn$VXVL
.V6�8V�PZ�PO�PP�P�P�D�
H�cM!�
�{=VP �#~BV` �~PVw ��t�� ��vnV� �CB
�
��tV�
Z|yV�
���V� ��O�V!�|��V
�!�|��V�!��!�V�!��O�V�!��!�V"��!�0"�@I��"�@I%�"��t(�"�stD#��t#��C�V�#��t��C�V�#��J�V�$��JW#4%��W&�%��W)�%��tW,�%��tW0�%��xnV5�%��x6W5�%��t=W6*&�	�73:2&�	PKW::&�	WO3:B&�	�AQW:J&�	heWW:R&�w]W:\&��4eW:�&��kW;�&��KvW;'��7�W<�(��=�W?�(��tB�(�6��WB�(�X��WB�(��!�WBr)��t�WD�)�stDD�)��tD�)��t�D�)��!�E�)�<}�F�)�.J�G�)�&D3H�)�3DH*����WI*��L3J*��L�WJT*�!L�WK�*��u�N+�gL�WP�+��LXR,�!H
XU.,��tWD,��tXW�,��t�W�,�^i�,X�,�	}�zX�,�	�� X�,�|d�X�,�.J�Z�,��t;[-�stD[-��!�[(-��e\8-�<}�\p-��!�]�-��tX^�-��{X`.�P'X`	.�ـnV`.��6W`.��!-Xa0.�CB
ce.�*�7Xen.��tWf�.��t>Xj�.�	PKWo�.�	WO3o�.�	�AQWo�.�	�73o�.�	�~MXo�.��L3o�/�	heWWo�/��t�o�/��tq0��XXr0�	X:3r�
�O]Xr0�5
r@0�'
t�CB
vm0���gXxx0��tx�0�ʘx�1�x#2�ZmXx+2��hsXx32���Vx;2����VxD2�f�yXxt2�f��Xy�2�f��X{3�f��X})3��|�XE3��|�X�p3��b�X��3��b�X��3��b�X��3����X��3��bY�4��bY�H4��bY�k4�p� Y�|4�- *Y��4�e|7Y��4�2TPY��4�mB�X�P5�
K��5�S@VY��5�� ^Y�46��_oY��6��tX�S7��t�w7��t}Y��7��t���7��t�Y��7��y��7��O]X��7�CB
�8�*�t	�$8�@_�+8��t�Y�<8��t�Y��8�	�73��8�	PKW��8�	WO3��8�	�AQW��8�	�~MX��8���tV��8��L3��9�	heWW��
�~MX��
`P3��
9��Y��
�73��
PKW��
WO3��
�AQW��
heWW��
X:3��
�O]X��
aU3��
]�>��
X:3��
|@QW��
bW�Y��
Oc3��
P]�Y��
�<3��9��t�Y��9�I��Y��9��O]X��9��w�Y��9�CB
��9�'
��:��t��:�L��Y��:�W��Y��:�[" ��:�f"��:�X:3��:�q^(�;�^B-�	;�M�Y�;�AZ�Y�;�TZ�Y�$;�X9�Y�p;��Z�Y��;��6	Z��;��|Z�`<��7Z�P=��j Z��=��t��=��tX��=��tW��=��tW�3>�	�73�;>��~.Z�C>�	PKW�K>�	WO3�S>�	�AQW�[>�	�~MX�p>��L3��?�	heWW��?��C:Z�@��tKZ�F@�	�73�N@�	PKW�V@�	WO3�^@�	�AQW�f@�	`P3�n@�	9��Y�v@�	heWW�~@���tV��@�]�>��@���[Z��@��vnV��@�evaZ��@�ZmX��@����V��@��tkZ�A��SZ�A��S�Z�#A�L��Z�4A�bR�Z�lA��x�Z��A����Z��A�Zd�Z�B��t�'B��t�/B��t�8B��t�
�BB��t�
�LB�=<3�TB��t�\B��t�eB��t�Z�tB��t�Z��B��t�
��B��t���B��t�
��B��|�Z��B��7�Z�@C��t�HC�	X:3�PC�a:�YC�	|@QW�aC��@�Z�jC�	bW�Y�rC�nW�Z�{C�	Oc3��C�Wc��C�	P]�Y��C�b][��C�	�<3��C��<��C�	]�>��C�]
[��C�	aU3��C�nU��C��C��C��L3��C��t��C��t��C��t�D��t�
�
D��t.�0D��t�
:D��tBD��tKD��t�
UD��t�
_D��tgD��tpD��t�
	zD��t[�D��t[
�D��t�
�D��t�D��tE��t�
E��t�
)E��t1E��t:E��t�
DE��t\E��t"[uE��t�
E��t�E��t�E��t�
 �E��t+["�E��t4[%�E��t�
)�E��t@[+,F�	���V.4F�	��tV.<F�	Z|yV.DF�5
.SF��tL[0tF�	WO31�F�	�AQW1�F�	�731�F�	PKW1�F�`P31�F�9��Y1�F�	�~MX1�F���tV1�F��L31�F�	heWW1�F��JR[1G��JY[2H��J`[4,H��Qe[5�H�un[8�H�djs[9,I�EL~[<�I��tX=�I���[=lJ��
�[=�J��t=�J�Sh�[=K��BR=$K��B�[=,K��L�[>BK�9�[>XK�)!�[>nK�&��[>�K��[>�K���[>�K����[>�K�vM�[>�K��8�[>�K����[>L�pY�[>L�xf�[>4L��#�[>JL��I�[>`L�Ն�[>vL��U�[>�L��Y�[>�L��U�[>�L��H�[>�L��5�[>�L��K�[>�L��L�[>M��5�[>&M��j�[><M�O#�[>RM�o#�[>hM��H�[>~M�8H�[>�M�#�[>�M��"�[>�M��4�[>�M��4�[>�M��I�[>N�J�[>N��#�[>.N�6�[>DN�3y�[>ZN����[>pN��]�[>�N�=A�[>�N�$#�[>�N�gh�[>�N��7�[>�N�
b�[>�N�v=�[>
O���[> O��Z�[>6O�у�[>LO�A!�[>bO����[>xO�q"�[>�O�2^�[>�O�vJ�[>�O�O��[>�O�O8�[>�O���[>�O��R�[>P�B�[>(P�(�[>>P���[>TP���[>jP���[>�P�	�a3>�P�	�a>�P�	V=3?�P�	f=?�P�	� 3@�P�� @Q�	`P3A#Q�	mPA,Q�xw�[B4Q�	)" B<Q�	5"BEQ�	�Q�YCMQ�	�Q�[CVQ�	{�[D^Q��73D{Q��7D�Q��]�[E�Q��]�[E�Q�	���[F�Q�	���[F�Q�	x;3G�Q��;G�Q�	�W�YH�Q��W�ZH�Q�M�[I�Q�#8�[I�Q�98�[I�Q�	�u�[JR�
v�[JR��L3K R�~\K�R��tM�
�a3M�
�aM�
V=3N�
f=N�
)" O�
5"O�
`P3P�
mPP�
�Q�YQ�
�Q�[Q�
� 3R�
{�[R�
���[R�
���[R�
x;3S�
�W�YS�
�u�[S)S��t�S?S��t\UlS��:3YtS��u3Y|S�M \Y�S��M,\Y�S��M2\Y�S��|9\Z�T��|^[�T��7z\V��~�$\V��t\$V��tN\-V��t@\]6V��tH\^EV��tO\_UV��t]\a_V�RBh\c�V���n\e�V�W4	Ae�V��e	Ag�V�m	AiW��tkW��6=kW��|T	k&W��7�m5W��tXnAW��tt\nPW��t�\o`W���n\qmW�RB�\q�W��tr�W��tNr�W��t@\s�W�RB�\t�W���n\u�W��tNu�W�,}�\v�W�RB�\vX��y�\wJX��|�\wwX��|^x�X��7zyLY��tyTY��tNy`Y�RBh\z�Y���n\|�Y��tj|�Y�RB�\}Z���n\~Z�RB�~Z��tNGZ��t�ZZ��U�\�dZ�RB�\��Z��|�\��Z��|^��Z��7z��[��y�\��RB�\����n\��[����\�\����\�@\����\�z\��tN��\��t��\�RB�\��RBh\��\��t��\�W3��\�RB�\�(]��y�\�8]��|�\�W]��|^��]��7z��]��t��]��tN��]�RBh\��RB���]��t�\��]�AZ]��]��|	]�^��|^�H^��7z�X^�RB�\�}^��y�\��^��t]��^��t!]��^�RBh\��^���n\��^��b9]��^��t��^��tN��^��t@\�_��t?]�_��tF]�1_��tT]�;_�RBh\�O_���n\�\_���_]�i_���f]�q_���o]�y_���v]��_���]��_��D�\� `�RB�\���y�\�#`��t�+`��6�]�2`��|�]�8`��7�]�@`��t�H`��tX�T`��t�\`��tN�e`�RB��k`���n\�r`��b9]�z`��t��`��tN��`��t?]��`��tF]��`�RBh\�2a���n\�?a��t�Ga��tN�Pa�RB��Va���n\�]a��t��la�eH+�ta�RB�\��a��y�\��a�^dA��a�^d3��a��|^�b��|L�)b��7z�Jb��t]�Yb��t!]�ib�RB�\��b���n\��b��t��b��tN��b�RB�\��b���n\��b��t��b��6�]��b��|^��b��7z��b�RB�\��b��y�\��b��tX��b��t��b��tN�c�RB�\�!c���n\�(c��tN�1c��t�<c�RB�\��RB�\�Zc�L;�]�rc�	;�]��c��H�]��c��H�]��c��H�]��c�G�]�d�@I�]�8d�I�]�@d��H�]��d�.I�]��e��y�]��e��tX��i���]�Xj��t�]�gj��S�pj�5
��j�Ȇ���j��t�]��j��t^�%k�stD�-k�	}�z�Vk�	�T^�{k���^��k��T^��H&^��g�A^��k��t���k�j:3��k�eH0��k�5
��k��VS^�	l�@I_^l�@Ig^(l�.Uo^Pl�.Uu^xl��tX�l�tS+m��t#m��xVm��9�	�t9�
<m��tX��xV��9���S{^
��S�^}m�蘏^�m��S{^�m��S�^�m��!�^�m��t��4��4�^�)C�
]�^�m��t�^n����n��?)0�n��e�^�n��e�^�n��J �n��J�n�MSz�n�US�n�[Pz$o�q!zio��t
[xo�]�>�o�	�\�^�o��xV�o��9��o��4�o��4�^�o�)C�o��C�^ ��y�^!��f�^"�o�A3#�o�[0#�o��3#�o��0#p��t�^#%p�5
'[p��VS^)pp��t#+|p��y�^,�p��f�^-q��xV.2q��C_/:q�t9�0Lq��tX1�H_1�q��t#3�q�H_4�q��!_6Dr�,_(_7�r��C5_8�r�q4>_9�s�QJ_;�t�t9�=�t��tX>�H_>�t��t#@�t�t9�A�t�H_B�t�q4~[D�t�u@~[E�t��CQ_F�t��t#Gu��C�^Hu�H&^Ipu�g�A^M�u��xVP�u�t9�Q8v�p�Z_R�v�(�k_W w��=�_^|w��tXbx�ߓ3bx��bx��S�_c_x��tfgx��y�_fox��t�_f�x��?�_h�x��t^i�x�stDi�x�	}�zi�x�	�T^i�x�ߓ3j�x��j�x��S�_ky��tny���_n&y���`n/y��6 o7y��6o@y��S`p�y�'H>_s�y�'H4`uz��twz��tXw.z�zH`w8z��SQ`w��S?5y�z��t|�z��tX|�z��3|�z���|�z��Sf`}�z��t��z�	��~`��z�	���`��z�	�=3�{�	�=�{�	�M,\�{�	�M2\� {�	L�nV�({�	ـnV�0{�	zH`�7{��A�
�?{��A�H{�Z3�P{�!Z�\{� Q`��{��t��{�ߓ��{�`��{�FC ��{�VC��{��S�`�7|�p��`�@|�~4�`��8�`��|�qj�`�@}�l �`��}�>��`��}��t��
��~`��
���`��
�=3��
�=��
�M,\��
�M2\��
L�nV��
ـnV��
zH`�� Q`��
_c�`��
O�z��v�`���xa���=)a��}�	��~`��}�	���`��}�	�=3��}�	�=��}�	�M,\��}�	�M2\��}�	L�nV��}�X�6W��}�	ـnV��}��6W��
zH`��}� Q`���SQ`�K~��t�S~��xnV�[~��x6W�d~��t�m~��t�
�w~��t�~��t��~��t��~�X:3��~�a:��~��T�Y���;a���!Ia�$��gPa����Caa�P���Rma����"ma� ��nMa�8��8�a�����R�a�����R�a�Ɂ��t�܁�l��a���mQz����t����t6W� ���t�
�*���t�a�?���t�a�P���O6W�Ԃ��J�Z�d��\W�a����\W�a�����O6W�@���!��p���O6W�L���4�a�y���tX����zH`�����SQ`����t����t�����t����t�����t�
� ���t�a�5��8�`�E���t�M��	_c�`�U��	O�z�\��v�`�����xa�����=)a����w�a�,����b�w��Tb�����b����Beb�����lb�LJ��6b�߇��64����Wb ���:~[X��AOb����t����tX���	_c�`���	O�z���v�`���6$b8��s�n[`���"3b����xa����=)a����t���tX#��	_c�`*��	O�z0��v�`����xa���=)a"����xCb%-���t'5���tX'H��s��'����xnV(���	Ֆ3(����t(�s��(��xnV)�
Ֆ3)���	_c�`)���	O�z)����Mb)���v�`)���xa-����=)a0����t3ō��tX3׍�	_c�`3ߍ�	O�z3��v�`37���xa7@���=)a:����t=Ў��tX=��	_c�`=���	O�z=���v�`=L���xaAS���=)aD���tG����tXG����tG����tYbHǏ��t�Iۏ��t�J���	}�zL���	�T^L���t^M��stDM&���t`bMZ��	}�zOg��	�T^Ou���t^P���stDP���8jbP�MUtbP�5�bQ���	-9 T���tdT�MUtbV���tW���t�bW��	}�zY'��	�T^YE���t^ZY��stDZa���t�bZ���5
\����t`b^ґ�	}�z`ߑ�	�T^`���t^a���stDa��8jba�D�\a��D�\b3���tc;���� cC����cL��S dT��%Sd`��D�\e����tfΒ�D�\f���tg��D�\g����T h���Th
���n3i���ni ��D�\j����tk���)e�bk���tdkΓ�	-9 mԓ�5�bmd���tpw���t�bp���ܕ�br�����br���5
r����L3t���t�^t,��MU�bu���9W3v���GWv���
W3w���Ww���)e�bx���MUtbxؖ���by����tzȗ�MUtbz��yH�b{/���t}I���t�}_��W3g��eH0o��5�b����?�b�����J3�����J����	-9 ����td�9���t�L��MUtb�U��-��b��MUc�j���t�r��)ec�z��1e+c����V ���� V�����V3�����V����MUtb����-��b���;�<c�4��MUc�����hIc�����t�����tX����)eOc�����h[c�����hac����MUtb�؜��t�����Uhc�����t����trc�%��	-9 �T��td����t}c��MU�b����t����tX���)e�b���	-9 �"��td�0��5�b�u���t�����t����j:3����x:����MU�b�����;�c���MU�b����t����z�c�,���t�4��Q�c���MUtb�`���t���z�c�h��Wz�c����MUtb�%���t�-���z�c�=���t�����c�E���t�i����gX�q��%i�c�y��7i�c�����6�c�������c������c�����d�@��#~d�����Md����%d�L��Z�0d�m��O�:d����O�@d�x��O�Jd���ށTd�����|fd�h���Csd����k~d���8�d�h���v�d�����v�d����ʘ�R���tX��
X:3��
a:��
bW�Y��
nW�Z��2��d���|�d�^��Peq�f���t�y���tn(�����t� ����nM��ժ��|�����|^�!���7z�.�����d�7��
��d�D���t�d����k~�d����x
e�ī�3~e�̫�	}�z���	�� ����t e���stD� ���!*e�r���e����<}1e����|d8e�Ȭ�.J1e���	X:3�%��	a:�.��	bW�Y�6��	nW�Z�?��zW�Y�G���W�Z�P��xwAe�X��]yGe�`��gyMe�l��2��d�8���|�d�|��k�Te������ce����c{oe�Ů�c{ze�خ�nM�e�,��9�e�����|�e���UJ�eǯ��tگ��t�e
��	�73	��	PKW	��	WO3	"��	�AQW	*��	heWW	2���t�(	P���P� 
X��nM�
i���t|���t� �����q�nM�����e
����t
����t� 
İ�nM�������e����t���t� ��nM�A�����eH��R��eP��?�fX��R�fn��_�fv��s�f��bW�Y���nW�Z���X:3���a:���;7#f���)�)f8���|�XA���|1fL��|ZBfܲ�_B1f���_B�X��4�Kf]���t �8Rf ����t!����63"���nM�"����|Xf#˳��|^$����7z%���L3%�nM�%���t�&=��	}�z'J��	�� 'W�� d�#'`���T;'���	�T_f(δ�	�Tef)���t�"+��stD+���!�+0���8lf,O���8vf-o���e/|��<}�f/���|d�f0D��.J�f2x���J�f3����ef4�����6̶��T�7ζ�5U"8��@I%97��	}�z;D��	�� ;G��	^��f;T��	�z�f;a��	�T�f;o��	�T�f<����Z�f>����!�fA���!�fB$���eC1��<}�fC?��|d�fDF��.J�fFM��<}�fG`��|d�fHt��.J�fJ|���!gKظ��ogM���tgM���stDM����!�fM�����O��.J�P$��@I%gQ3���tSL���tSp���t�S����t�$T����+X�����+X���� X��Ą X���� X3���e XP���|^Xp���|K$Y���7zZp��nM�Z���L3[���t[!���tZ*[5���t.g\n���t�^����t�$_���ix�$c����� c��nM�c(���td1���t�e;���tAggP���|^hp���7zi}���|Hgi���M�j����tOgkѾ�bWsgqپ�aU~gq���AQWq���c~gq���c~gq���P]�Yq��nM�gq���|�grp���|^s����7zt@���tt���8Rfu���~\v
���t�gx.��!3z6��nM�gzM���L3{d���t�`{x��{�[|���nM�g|����L3}����t�g} �����e�7���t�g�H��!3�P��
P�g����nM�g����td�g�����t�g������~`�������`��nM�g�����t�����t�g�����t�g�����t�g����nM�g���������t�$���t�,���6h�3��LI
h�J��CIh�`���tX�l���t�t���6 h�{��LI&h����CI.h�����tX�����t�����65h����LI&h����CI.h�����tX�����t����6;h���LIAh�"��CI�g�8���tX�D���t�L���6Ih�S��LI&h�j��CI.h�����tX�����tOh�����U_h����td�g�(���|nh�����|^�"���7z�9���t�n��=<3�v��LIuh����CIh�����|�h�����|^����7z�)���t�1���6�h�8��LI�h�k��CI�h�����tX�����t�����6�h����LI�h����CI�h�����tX�����t�����6�h����LI&h����CI.h����tX����t�%���6�h�,��LI�h�Z��CI�h�u���tX�����t�����6�h����LI�h����CI�h�����tX��LI���CI;��td����zu&��td������t�����t^%���lm&�
��3U
&���td��M���|)&�����|^�����7z�����ti���lm_&�	��3U�&���td������|�&�����|^�����7z����t��%��eH+�-������8���|�&�����|^�����7z������������t�����D �����bi�����b(i�����:i����t���E}f�$��Q}f�-��MUtb�6��-��b�M���t�U���D �X���bEi�`���bVi�����t�����D �����b�(�����b�(����t����t�g�'���t�g�0���@3�8��A�A����~`�I�����`�R��1k~`�Z��Bk�`�c���U_h�k��$f�'�s��/fpi�|��Bhwi����|7wi�x��FP}i�����t�����D �����b�i����b�i����8�i�0���8�i�T���8�i�h��u�i����t����D ����bj���bjr���t
z���D 
}����(
����b#j����b0j���t���D !���b;j<���bHj���XNZj����dj���7=dj���t $���D  (���bpj b���b�j%}���t(����D (����b�j(����b�j+����t0���D 0���b�j0 ���b�j3���7�j8��7�j<0�����j?K���P�jAj��&Q�jCq��6Q�jE���\Q�jG����K�jI��7�jK��IQ�jM8����jO����W�jQ1���tS9���D S<���bkSX���bkV���yc7k[m���t]x���b0j]��b�(`����b#jc��b�(g7����(lI���9�(m[���@�(ni���toq���D ot���bFko����bXkt����tw����D w����bekw���brkz����^�k���B��k�H��"U�k����B5�k�X���5�k����'5�k����t����D ����b�k�4���b�k�����t�����D �����b�k����b�k�l��F=l����XNl�����l���dNl����t�'���t+�6��&j*�>���bl�L���b-l����—*�,���tX�@���bGl�����bXl����txF*�����t�����t�����t�����t�
�����trl�
��NO3���
fz���!^z�%���C}l�L���C�l�����C�l�����C�l�����C�l�����C�l�����C�l����l�l�P��3��l����I�l����Im�V��zA!m�s��`,m����S9m����SBm����SLm�����tX\��)OWm����tX����t����\m����t����C����� ���	��Y��������	�0���Dpbm#��stD+���t3��JY,G���tX
S���t
[����+
c��
,p���t����C
����� 
8���
R��	��+
Z����
a��	�0
p���r;
���stD
����t
�����
����t��������tX!���t)���km4���tX@���tH��`rmU���tp���C����� t����������	ܐxm��������	�0��,s}m��stD���t*���C,���� ��	���m������	�0����t����m\���tXh���tp����mx���t���������t���A�����t��#����t-X��nR�m���wR�m���M,\
���M2\��o��Yb���tj��P�m����� ��1@�.���tH���C����� 8���T��	��'X\����c��	�0l���p�m���stD���t��E�m���� ���1@� ����tX!����t!�����m!�����"��1@�"����#t�1@�#���t$��4�m$���tX%���t%��<�m%���tX&���t&����m&���	�m'���tX(���t(����/(����)��1@�)���tX*���t*��n*��t+�27X+%��tX,1��t,9��n,A��t-I�27X-W��tX.c��t.k��n.s��t/���C0���� 0��	G�30����0��	�00���p)003�stD0;��t0C�2^0\��t1v��C2x��� 2��	G�32����2��	�02���p)02��stD2���t2	��C3��� 3-�	G�335���3<�	�03D��p)03{�stD3��t�3�X9n5�S9$n9�I95n?���tA���>nA����B@
�1@�BP
���C$�1@�C2��tXD>��tDF�P�DV��>nEh���Fp
�1@�F�
���G|�1@�G����H��1@�H����I��1@�I����J��1@�J���tK��
EnK��tXL��tL"�VnL0���MD�1@�MT���N��1@�N����O��1@�O���t�P��5
R��tXT"��tT*�FVnT5�;anU@���V!�1@�V"!��tW,!�h�mWt!��tX|!�h�mX�!���Y�"�1@�Y�"���Z$$�1@�Z4$���[`&�1@�[p&���\x'�1@�\�'��t]�'��C^�'��� ^(�	L�nn^(���^(�	�0^$(��rtn^g(�stD^p(���^\)�1@�^j)��tX_v)��t_~)��~n_�)��~n`�)��t�na�)��C�Ye-*�"VfX*�5B�ng�*��ti�*��tXi�*���i�+�1@�i�+���j�,�1@�j-��tXk-��tk-�r�nk-��tl8-��Cm<-��� m�-�	L��bm�-���m�-�	�0m�-��s�nm+.�stDm4.���mx2�1@�m�2���nh3�1@�nx3���o�4�1@�o�4���p7�1@�p,7���q�8�1@�q�8��tr�8��nr�8��tXs�8��ts9��
�ns9���nt89���u�<�1@�u�<���v�=�1@�v�=���w�B�1@�w�B���xF�1@�x$F���y�H�1@�y�H��tz�H��C{�H��� {I�	���b{I���{I�	�0{I��t{(I��C|`I��� |J��|8J�	���b|@J���|GJ�	�0|OJ��tX|[J��t|cJ�^|iJ��tX}uJ��t}}J���}�J���m~�J��tX�J��t�J�0�n�J��6�n��J��t��J��|�n��J��7�n��J��tX��J��tX��J��t�K����	K��t�#K��C�(K��� �vK�	���b�~K�����K�	�0��K�
t^��K�stD��K��t�L��C�L��� ��L�	���b�M����
M�	�0�M�
t^�cM�stD�kM��t�tM�y���M��t��M��n��M���n�&N��t�0N��o��N��t��N�&o�O��t�(O�7o�xO��t��O�NFo��O��tX��O��t��O�sSo��O��t��O�bo��O��t��O��C�4P��� ��Q����Q�	���b�R����R�	�0�R�
t^�_R�stD�gR��tX�sR��t�{R�Zio��R��io��R��t��R����R��t��R��C�S��� � T���<T�	Տpo�DT����KT�	�0�XT�rvo��T�stD��T��t��T���o��T��tX��T��t��T���o��T��	�o��T�R�o��T���o�
U�=�o�U���o�U�+�o�%U��t�@U��C�xU��� ��W����W�	L��b��W�����W�	�0�X��s�n�CX�stD�LX��t�o��X�X:3��X�_93��X�V=3��X�
� ��X�|@�o��X��I ��X��t�o��X�A" �Y����o�Y�e�o�Y��]3�Y�E}�o�(Y��}�\��Y�]}�\�(Z��y�\��Z�bz�o�[�[��o�G\��t�o�t\�X:3�|\��! ��\��P�o��\��:3��\�8J�o��\��t��\���o��\��tX��\��t��\���o�
]��t�o�]�X:3�+]��]3�=]��}�O]�]}�a]��"�\��]��]3��]�
� ��]��I ��]�q}3�_^��"�\��^��"3��^�hd�o��_��tX��_��t��_���o��_�)
�o��_���c��_��
p�`��tX�
`��t�`��p�<`��	�o�D`�R�o�L`��t�f`��C�h`��� ��a�	L��b��a�����a�	�0��a��s�n�b�stD� b�����e�1@���e��tX��e��t�f�"p�f�)p�f��g�$f��t�,f��0p�<f����h�1@��h��t�h��7p�(h��t�Dh��C�|h��� ��j����j�	ܐxm��j�����j�	�0��j�,s}m�#k�stD�,k�����l�1@��m����8n�1@��Fn��t�Nn���\n��t�vn��C�xn��� �+o�	G�3�3o����:o�	�0�Do��p)0��o�stD��o��t��o��C��o��� ��p����p�	��'X��p�����p�	�0��p��p�m�Wq�stD�_q��t�gq��t�oq��?p��q��t��q��C��q��� ��r���s�	��'X�s����s�	�0� s��p�m�{s�stD��s��t��s����s��t��s����s��t��s��Fp��s��tX��s��t��s�WRp��s��t��s��C�,t��� �u���4u�	�KW�<u����Cu�	�0�Lu�:qap��u�stD��u��t��u��C�v��� ��w����w�	�KW��w�����w�	�0��w�:qap�x�stD�x��t�'x��"�@x��tX�Lx��t�Tx���"�\x��t�dx�A"��x��t��x��"��x��t��x��"��x��t�y��"�y��tX�%y��t�-y�J�f�5y��tX�Ay��t�Iy��K$�Qy��t�Yy��K$�gy��t��y��C��y��� �xz����z�	��'X��z�����z�	�0��z��p�m��z�stD�{��t� {��C�x{��� � }���<}���W}�	���b�_}����f}�	�0�p}�
t^��}�stD��}��t��}��C�~��� ��~����	`�]�����#�	�0�,��qkp���stD����t����C����� �8��	`�]�@�����G��	�0�P���qkp����stD�����t�̀��C�Ѐ��� ����	`�]����������	�0�����qkp���stD����t�����\���t���X9.*��S9up��I9�p�5���t�O���C�T���� �h��	���p�p�����w��	�0����#o�@�σ�stD�׃��tX����t�����p���<
�p������p�����p���Y�p����p�����p�$��G�p�,��/�p�5����p�=���p�E����p�M����p�a���p�u��"�p������p����-�p������p�ń���p�ل���p���9�p����V	�p�����p���;�p�*����p7����pM��E�pd����pl����p�����p���J�p���}	,\��� ,\���L,\����,\����,\����,\����,\…�,\Ʌ��,\Ѕ�[,\ׅ��	�p��8�p���}�p����p	���p���tX���t$����p/���p7����p	?����p
G���pO���pW����p
b���	�pj��x�pr��b�p}��V
�p����tX����t����m���d�m���Y�m���Z�m���#�m����t†��CĆ��� U��	`�]]����d��	�0l���qkp���stD� �}�n�?�UW�I�zh��������l�����l��șș����șa7��a7���~�?7]�I
R�~�?
R�~�?
R�?�~
RUP~8BfOUP~8�~BfO�IBfO~8#woua7a71�vea71�bYbYouj�T�T�T�I`DI�\�:Ȃ�:ȂȂ�IȂ�IaȂ�Oj��L��T�T�T�I�UP�I�R#OUW�IIYUP~8BfOUP~8�`BfO�?��?UW�IUW�IUW�I���Q�A{��|��A{PT�u�f�u�f�u���uPT�u�f�u�f�u���u����#��|�(��a(�څ�?�?\�?��?�\UW�I�I�~8�~8�~l��w�?�IUW�I�?�I�I�I�Ie6�3Z�Z��ș�O�R�jUP~8BfOUP~8�~BfO�aUP�:BfOUP~8fOBzPF��,]ޘ3Z7��@c�zc�z(��B~8~8�`
eI�~8�5s<~8�5s<~8�`~8s<
eI���ș�O�I�I�I�I�I�I�I�I~8~8�`���
eI�~8~8�`
eI�~8~8�`0B�I0B�I�`
eI�k;~8�`
eI�~8~8�`0B0B�`
eI�~8~8�`�#�Q�I�#�Q�I�`
eI�Δ�n�|UW�I��I�I0B�Im��bM�4�?�Isu�I�I�I�I�I�I�I�I�I�I�I�I�I�I�\�I�I�I�I�I�I�:�u�:~�u�M�Izh�Ou7u7�~�~u7�~u7m���ș��ș��ș��ș�O?]?]u7Mu7u7�{u7\zh�Ou7m��X\��u7\zh�O�{�{\d\d�t�t\du7�{m�UW\zh�Ou7m����Zzh�O\  u7m�u7u7�b�bu7�bu7m��I�I�I�I�I\\��ș�Ou7��u7�b�bu7m�u7���I\zh�O�Ozh  u7�{u7M�O\u7�{u7�{M�J�J�J�J�I�JyO���I�J�<�I�JyO���IIu��I(�yO���I(�yO���I�<I(�UW�I��W�5J(��I1�|y�6�I1��6�:�IUW�Ih�T1��@�@1��@1�e6e6e6e6e6e6e6e6�@e6e6�@0BNu���:�y�I�I�I,]e6e6���:e6ےےPf��UW�Ih�Te6ےےe6e6e6ے~e6ے~� %�e6ے~�Isue6j�~e6e6j�~j�j�e6e6e6�IGd|y�6�IGd�6e6e6�IGd��6�=�=qO|y���4�j�j�?�4�j=e�Ie6�S~�y�;suW��Ie6�S~�I�Ie6�S~Rd~��~e6~e6�S~�Ie6�S~�I�I�I�I�Ie6~�I�Ie6�S~�4�n��~�f�4�?�I�4�f�I�I�Ie6~e61��{bYe6́bY1�́bY�I�I�I�I�Ie6~e6~�I~8~8�`�?�I�I�g1��ǵe6����Te6���Te6M;Oe6�|�l1�bYzh�d8�1�bY1�bYzhzh_~_~zh1��Izh1��Ie6~~8~8M~8�`�`~8�{�fe61��{bYe6́bY1�́bY�S�Sy6l�:�Wl�:�Wl�:�Wl�:�Wl�:�W�<c��:l�:�W07e6��\fe61��{bYe6�zCe6�?�ze6́bY1�́bYe61��{bYe6́bY1�́bYe61�e6e6e61��{bYe6́bY1�́bYe61��{bYe6́bY1�́bYe61��{bYe6́bY1�́bY��\�1��IW�#Ou7W�u7u7UW�Iu7$9u7#Ou7W�#Ou7UW�I#Ou7W�77�I�I777�I�I7u7$9u7UW�I��UW�I@wu7�I�Iu7u7u7u71�UW�Iu7UW�I�Iu7$9u7u7ҕ�I�I�Iu7u7$�ҕ�Iu7Vu7$9څ\u7u7$9u7UW�I�:�Iu7(�u7	{(�!;u7	{	{u7	{(�,]3Z�I(�,]3Z(���(�l�څ�e6(�(�UPI�UPj�IYj�e6���|���J���R�J��e6�|=�e6�|)�e6�w)��I�I�<wk{�z|<wk{6}6}�Izh�O������6}�T�T��L��T�I�I�I�I�<wk{�z|<wk{9�{� ���n�8�>:1wW{u7�1wW{u7�UPBfO~8�P�Í�Í�Í�I�I�I�I�I�T�u��2{!��2{��u��6�Izh�O�I/d1�W�W��I�Tx\W�x\�T��L��T�TW��TW��I�I1��I1�1��I�?��I�T�T�T��L��T�T��L��T�?�T1��I1�1�1��I�H�����ք�Ozh�I�xv!��H�����ք�IRdRd�~zh�Ozh�I�W{U�A�c�]�c�Izh�O~8��\S!�fUPk{UPEu��xu7S!��x�<�W����x�IUPEu��x�Iu7��P�mI��mI��mI��mI��mI��xUPzh�Os<�mI�zh�O�mI��mI��mI��mI��mI��mI����inWU�zh�OinWU�zh�O�I�Pzh�O�P*k�I�l�f�A�H�H�l�Iu7u7*k�I�l�f�A�H�H�l*k�I�l�f�A�H�H�l�I�I�I�I�I*k�I�l�f�A�H�H�l�f�lin�f�lin�f�l�f�l*k�I�l�f�A�H�H�l�A�f�A�H�l*k�I�l*k�I�l�f�A�H�H�l�7�f�f�l�fI�f�A�H�H�l*k�I�l*k�I�l�f�A�H�H�l*k�I�l�f�A�H�H�l�T�f�l�U�f�l�U�f�l�f�lIu�f�l�f�l�fI�f�l�f�l�f�l�f�l*k�I�l�f�A�H�H�l�f�l*k�I�l*k�I�l�f�A�H�l�f�A�H�H�l�AO�O��f�A�H�H�l*k�I�l*k�I�l�f�A�H�H�l�L�f�`�L�f�L�fXe�f�lXe�f�lXe�f�l*k�I�l�f�A�H�H�l*k�I�l�f�A�H�H�l�fI�7�f�f�l�f�l1j*k�I�l�f�A�H�H�l�Z�f*k�I�l�f�A�H�H�l�f�l~8~8�`~8yOfX^�`�f~8�`yO�d~8�`�fPDr�`yO�dPDr�`�fPDr��`yO�dPDr��`�fPDr���`Xe�?�A�f��?�f1S'z��?�f�l1S'z�f�#�f�#�I�f~8�I�f~8��I�f~8�m��k�O��D�O�O� _�D�e�e`��J�D�D�M�O�O�O�O�R#O�I�I�OA@�D�OA@� A@A@�e���e�e��A@�O�O�O`��O�D'e�D�DE��4�JyO���I�JyO���I�OE��Iڅ�JA@A@T�JA@A@A@A@A@�u�uA@A@A@su�;UW�I�u5A@�U�OA@A@A@A@�DA@�I�I1��ǵbYe6e6��șA@A@Q��DA@A@A@A@A@�u�e�eA@A@A@A@A@�D�D�O�����e��ș�O���D�Dʕ� �lRd�M3<� 9e(��D� � �u�D5�O�O�O�O�O55�D�9�?�0B�tP"�I��	e
^�:�?"�P�:AJe�dʕ�O0��l(�(����O5�DA@� � UP�OA@UP�DA@A@�O�D�D���D�T�T�W��\d�D�D�e�Oqqq�e�T�O�u�D�D�D�D�DE��4��څ��څ�OE�څ؅�D�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{�{� � � � � � � � � � � � � � � � �D�"q	(
d
p.q6qhpt�hpppp�e!F"h"p#l#p*J+x+e33�4h4p7�<N?RB^DbFnJrNzN�N~U�V�V�V�VqV�WlX�Zl]p^l`x`lalb�c�cldle�elflg�glh\hlj�j�j�jqj�o�s�{�|�}�~��������������q���������q������������q�����������q���,�,�,�,�,������������������������q���d�p���������������q�
��q�����������"�����&�*�*�.�*�6�:�>�B�F�*�J�N�R�V�R�Z�b�
�q��i�e��q��i�e�*�q�&�i�e�2�i�eBq>iejqfiejqfiejqfie !$%&'�),-./0�0q0�0i0e14�568�8q8�8i8e9:;<=@ABCDE�EiEeF�FiFeJ�L�LqL�LiLeM�MqM�MiMeV�VqV�ViVeY�YqY�YiYe\�\q\�\i\ee�eqe�eieefik*kqk&kikelmojoqofoioepBpqp>pipesBsqs>sisex�xqx�xixey�yqy�yiye�B�q�>�i�e���q���i�e���q���i�e���q���i�e���q���i�e���q���i�e���q���i�e	�t�t�t!�t
1�t9�tA�tI�tQ�tY�ta�ti�tq�ty�t��t��t��t��t��C��� <�+���<�0�t;��tD��t<�+$�t;L<�+T�t;d<�+��t��t	��	1@�|<�+��t;Y�t��t��t��t���t	�t��t�<�+��t;��t�t\<�+d�t;�<�+��t;�<�+�t�t;�<�+��t;a�t��t`�<�+��t;�!��t;�nM�$<�+,�t;l<�+t�t;|�t|�}�|�n�,�t�1�t��t;�<�+�Ֆ+4����eH�4�!�<^��9C�	��t#�<�+A��4<�T;<�!�<.J���� �Ֆ+�eH���ta��Oa��Oa�Xet��t���!���t�ș������t��4����T��Ֆ+��t�������eH���t#��t(��t��t�t�T��t�9��b�!�}�z}�z�C�t#<�+���� �8�A�J�A~OzA�O�A�J�A�J�AM�A���AM�9���|�t�$<�,Ֆ+4@I%4�!�,eH�$�� <eH�D}�z��BR<Ֆ+L�T�A��_A��iA��t4�tT}�zT�!�\�t\�!�d�!�T�T�l}�zd�T�\�taT�td�tt�t�|Xe�t�!�t���t+J%Y�t�a�5�	5
q�tq�eq�4 q�4'Av�.��L39�@��t�9d�WA�VtA76.��BRA��~A�a�L�A���a�t���t�Xe���-��}�z�|d���t��{���T�����t��MR���t#��!���e��t��{���T�A��ׁ	��t��{���I�#���46	��J	��|T	��!���tt�t���!��@I%t*�t	tCB
q�t��t;�<�+1�73q~Ozq�O,�t�:�	��t���t�9=B�	��!���t�	��t
�jJ
��C6
��@
��PN
�h�^
�Td
�C6
�@
�PN
9���
eH�eH��c@0�C6
�@
�PN
��~$}�z1�`(��t.,�6=4�t�<�(V<@_<�$j<�yD@I%<*�t	L�t�����|d���T�A�|��T�T�ta�tq�C�q�@
q�P�A�P�T}�z\�t�9jRb��7zT^�d�t�9��-T�T;l�t�l!I l#�+tՖ+T@I%teH���|^|�t���t�9ܗ���z�9�����t;�<�+�Ֆ+�eH���t���t��t���{Y
�(�^
��Bc
��C6
�5h{
��D�
��@
��PN
��t�1�t1�t1�t�
1�t�
�!73A���
��C�X:3A���
����
��C�
��@�
9���
��A�
A�|
��|��j"�O<�oH(�M-!�!3q�tA��@q�4F��JOA��])��d�5�t��tz��L���t�aJ6���t9C�l�t���t��t��}�z��t��<��Ֆ+�@I%�eH���� �
��
��t�9�P�9��#��t;<�+apMl�� !�|!���<%��tX9;�t�$�t�,�t�9���9wQ�9u�8��tN<Zua<�tjD�tD�8aD�t#L<�+L�� 4�t;T<�+�^d��RB�\X9�d�t�l�t�t�t�|�t�4�!�4.J�)�7��t��tN��'�eH+��t�^dA��|L��7���t�9DgYH}aeH3YX:��@I%YeH3AȆ�I�����t�95��I ��I��I�]
Q��Q����t��!�IЀ0��t;�<�+A�PJ���S��t�9��m9��}9�����!��@I��@I%Q�t��t��!��z)�9c�i����t9�l�tl�!�|�!���T;�X9;��!���t��tA�t�<�+��4���)C�t#��C6
��@
��PN
��C6
��@
��PN
�xV$�t#��C6
��@
��PN
I��0�}�z��t#<�+q�4�q�?q�?'�� �t;<�+q���a�7�a}z���K��;3��t��Q�,�t#,tS+�C6
�@
�PN
$�C6
$�@
$�PN
,�C6
,�@
,�PN
4�t4�t�<�t#<}�z<�T�<�tanM�L�t�D�tT��\�{�\e6�\~�\5h\�D�
L�t�MVq<}�q�T\��IayoH(��jfyO<��!3d�C6
d�@
d�PN
T�tl�t�l�t�l�T�t�!�t�t�|<��Ֆ+apM��eH���ta�yy�~��TIeH3��!�|�� ��t;�<�+l�Oa��!�t�t|�z���t�9�U�|�t|�t�|�t�
l�ta|@I%l�J���t;�<�+l�Oa|.J�|}�z|�e��tl�Oa��t�mza�teA��y��C6
��@
��PN
��C6
��@
��PN
��C��腵A�J�,�y<�T���t���t���!��@I%A�L�l�t.�<�+��� �@I%��t��!�q�tA5B���t��t�9���}�z9,��9���9�V��@I%T�t��<���� ��t@I%�t�9<};��t�t��t�@I%�!�$�t�T�4�!��z���z���t�<�t<1��<y�9�t�����D�t�L^�T�tQ\<�+�5
t�t���!kl�!�\�� t�t#|<�+��T�|�� ��t���t���t�L�t��<��eH���t#�<�+9ce��Ֆ+��� ��� ��t��t��t��ta��t���t��>����T��td�}�z��t�@I%��t��T��@I%��T���!���t�	�t�9���	�t�	�t�	�t�9��$	�t��t,	�t;4	<�+<	�t;D	<�+�!�L	�t�T	�t;\	<�+d	�t�l	�t�t	�t�|	�t���zn��t#�	<�+��z��	�t��	<���	�� �	�� �	�!�T�!��	�t�	�t;�	<�+�	�Oa�	�t.�	<�+�	�� �	�,F�	�t�	�ta�	�t�	�I�	Peq�	��	�t��	�|��	�t�	�t�	�t��t;�	<�+
}�z
}�z
}�z9��8
�!�
�!�
�!�
�e
�e
�e
.J�
.J�
.J�
�t;$
<�+9�@@,
�~�dtd�4
�t�l<}�l�~�<
�t;D
<�+L
�(� L
�P� �nM��b1F���q�	�8a��t��t� T
�tT
�IT
�\
�td
�td
�Id
�l
�tt
�t�|
�!*!�
�t��
�CS!�}�z��T�|
@I%�
^��9,��
�
��!�
@I%|
�t�
�t�
Xe�!�
l,�!�
}�z�
�� �
�t�
1��
�"�
�t���t�
���
�T��
5U"�
�Th"�
�y"�
��"�
��"�
�t��t;�
�t�"�
�!��
�t��
�8a�
�8��
�e�
�t�
�T��
A"�
}�z�
�t#�
<�+�
�� �
�t�
�T��
�"�
�t��
MR��
�t�
�T��
�"�
4���
�h"�
���
�T��
 d�#X9;��C�#�t1��"}�z^���zn�T;�T�@I%l@I%l�t�"Ֆ+eH��!��e<}�|d�$�t��!*!l�!��t($�t;����t�,28$,�18$,�1,�1,��+,��+,�|K$,�� ,Ą ��7z4�t</y$4�ta4�t4�!�<ix�$4�8a,�t�,�t�$D��$D��$D�K$L�t�4WR	T�tT�I4}�zT�K$\�t�a�ta�~�$aRd�dnM��$%��d%��n3l�t�t�t^%|�!�|�td�t|�8a|�t#�<�+�td���� |}�z��T���e�}�z��8al�e��-�%��)�%�lm&�3U
&�CI;�����LI���|)&��-@&��)K&�lm_&��zu&�<�+�3U�&�td���|�&��t��'�eH+��|�&��t��t��!���t��t�lA�&��t��!���t��6'��!���tA�31�t�eH0��L3�q! ��t���t^%��t��t��t@I%X9+�{!�'�Gf�'�iD�'�t�t�t�t�@I%$X9;�t,�tn(�@Iz(4�b�(4�t�(A�J���J�(4�t��9�(�t��b�(��b�(�U�(��@ ��@�(��@�(<�t�@I�(�|@�(��I�(�{!2)�U2)��A[)��6r)D�t��tL�t<@I%DX9+T�t\�tL�-�)��H,�tL�c*L—*L&j*TX9.*�S4�T��`J6*\txF*<�tZ*<�td�td�fq*d�lv*d�t�t�t�
�NO3�d 
fz!^z!�t!sK�*!ZK�*!DK�*!��*��C�*��T�*��T�*�<}^A�V�*��C�*l�t�t�t+|�t��t�t$�t��!�<�tD�t�<�!��t�t��!��� 3+�}�z��t�9DM+��T��\Tp+��t��}���T���T���t���+�}�z�c@0��D�
�!�
����t���+��}����+���+��t���	,�
,��t���t#��>,�<�+�CO,�JY,��t�9d�i,��n��H���� ��C��t��}���n���r;4}�z4�t�
<�
eH�
�t�
Ֆ+
�� <�t��^i�,��|T	iQ4-k-�# ��#-���rD&-�# �i�,-)k3-1�# 1���3aB-�����1@�
�!�$
�t,
�t�4
�t�<
��-D
k�-L
�# �#-L
��+�8a3aB-���1@�T
��-\
k�-d
�# �#-d
��+l
�t�t
�t;|
<�+�
Ֆ+�
��-�
k�-�
�# �
��+3aB-���1@��
��-�
k�-�
�# q�#-�
��+q3aB-q��q1@��
�t�
�b/��t.�
�D�
�
�{Y
�
(�^
�
�Bc
�
��/�
��/�
�t���!*!�
?�/�� ��
E�/�
5h{
�
�#-�
X9;�
��-�
k�-�
�# �
q�/�
��+�vCz�
3aB-�
����
1@���D�
�!�
�H����p)0tS+�Y i0�
��-k�-�# ��#-��+��R���T�0� �0��-k�-$�# $��+�3aB-�����1@�,��-4k�-<�# ��#-<��+�3aB-�����1@�$tS+��#-��t��Cn1Y�tz1��t�1�q! ���T�1I�!(��@�1�X:3Q���1�3aB-�����1@�D�t�#-��t�L<�L�� 3aB-���1@�A^4�1$�#-$3aB-$���$1@�,�#-�D� ,3aB-,���,1@��?4�?�T�t\�t�d�t�l�t�D�8a���zD�!�D}�zT�!�t�t�|<��eH���t��<��Ֆ+�Ֆ+�eH����-�k�-��# ���+��� |�� ��t�a�t5�}�z��T5T�S?5\EV5��5��<��<�Wc�\�5� �5��t���-�k�-��# ���+��8a���6d�#-��t�d3aB-d���d1@��q! �ͅ ��!�i�P�6Q^d�6��t���T��}�z���6��t#�<�+��� ��<���-k�-�# ��+�@I%�X9�7��-$k�-,�# ,��+4��-<k�-D�# ��#-D��+�^�l�tV8�3aB-�����1@���#-D�T�T����3aB-�����1@��F %9L��-Tk�-\�# \��+d�tl�tl�!�t�t�,�t�d�!�|�t�d4��d�T�l�T;d�t#�<�+l.J���� d����e��T;��T;A�h�:A�T3A��?;!�iF;)�|L;)�739��l;9ςx;!P��;�1����t�a�x�;��t���t���t���t���t��?z�<��t���t��}�z�Ֆ+��t��<���t��eH���� �-9 9��A=��t;�<�+��t�95��
Ֆ+��t�t��t��t�$�t�,eH�4Ֆ+4eH�<�t�A�V&>9\W8A
��
D�t�L�tL�!�T�t#\<�+\�� �	�t��]�>T�T���t#d<�+d�� T}�zT��l}�zt�t;|<�+��t��!��lm&�3U
&�eH+��t;�<�+��t���t��
�t9<})@<nM��
w+�
�tD�t,�� ,nM��}�zd�D�
d!�
d�fq*d�lv*dH��@d��@d��
d#o�@!�!	A\�t�!ς	A!��	A!�7	A!Ih	A��tj!�KA�t��AsD|D�DL�DD�DH�DL�D|�D��D��D��D��D
�D�D�D�D%�D-�D4�D5�D=�Dp�Dt�Dx�D|�D��D��D��D�E�E�$E�_E�F�*F��F��F�?G�G�GL�G|�G�H�1H�tH�}H��H��H�tH��H�H��D��D��D��D��D��D��H��H��H��H��H�H(�H,�H0�H4tH8�H<IQ�D]�Da�D�%I�2I�II�`I�oI��I��I��I��I��I��I��I��I��I�J�HJJ�H"J�H ?J$�D(PJ,WJ0�D4�D8E<E@�IDhJHuJL�JP�HT�JX�J\�J`�Jd�Jh�Jl�JY	)�DU
L�
LL@�JD�JHKL#KMLPBKTcKX|K\�K`�KaLd�Kh�Kl�Kp�Kt�KxLY�DYL]L�L�L��D��D��D��D��D��D�D)�D9�DM�Da�Dy�D��D ��.�D.Ou.Xu.#wu.+�u.3�u.;�u.C�u.K�u.S�u.[�u.cv.khv.k�w.k^y.k�z.ka|.k�}.kL.s��.{ŀ.�ˀ@�U�A��D���D��D���D��D��D �D!��D@�DA��D`�Da��Dc�D��D���D��D���D��D���D���D��D� ����D���D��D!��DA��D`�Da��D���D���D���D���D���D���D��D ��D!��D@��DA��DC �`��Dc5����D���D���D���D���D���D�;N����D��D��D ���!��DA��Da��D���D�C�D���D���D���D���D���D����D!��DA��Da��D���D�ٚ���D��D���D�K���S�D���D���D���D�;���D!��DA��Da��D���D���D���D���D��D!��DA��Da��D���D���D���D���D!	��DA	��Da	��D�	��D�	��D�	��D�	��D
��D 
��D@
��D`
��D�
��D�
�D�
��D�
��D�
{K��
��D��D ��D!��D@��DA��D`��Da��D���D���D���D���D���D@��D`��D���D���D���D
��D
��D!
��DA
��DC
{K��
��D�
��D�
��D�
��D��D!��DA��Da��D���D�[wu���D�[wu���D���D��D!��DA��Da��D���D���D�U����D�������D��D ��!��DA��Da��Dc{K��W��{K����D��D{K�!��DA��DC{K�`��D���D���D���D���D��D@��DA��DCU�`��D���D���D ��D��D!��DA��Da��D���DCl�a��Dd3�D���D���D���D���D���D��D���!��DA��DCC�D`��Da��D���D���D���D���D�{K����D���D�{K����D��D ��D@��DC���`��D���D������Da��D���D���D���D���D��D��D ��D@��D`��Da��D���D���D���D���D���D��D ��D!��D@��DA��DIcț`��D���D���D���D���D���D���D���D���D��D��D ��D!��D@��DA��D`��Da��D���D���D���D���D���D���D���D���D���D���D���D���D���D��D!��D#��DC��DIcכc��D���D���D���D���D�cכ���D���D���D��D��D	��D ��D#��D@��DC��DI��D`��Dc��D���D���D���D���D�cț���D���D���D���D ��D ��D ��D  ��D# ��D@ ��DA ��DC ��D` ��Da ��Dc ��Di c�i ; ��D� ��D� ��D� cP�� ��D� ��D� ��D� ��D� ��D� ��D� ��D!��D!��D!!��D#!��DA!��DC!��Dc!��D�!��D�!��D�!��D�!��D�!��D�!��D�!��D�!��D�!cț"��D	"c��!"��D#"��D)"c�A"��DC"��Da"��Dc"��D�"��D�"��D�"��D�"��D�"��D�"��D#��D##��DA#��DC#��Da#��Dc#��D�#��D�#��D�#��D�#��D�#��D�#��D�#��D�#��D$��D$��D!$��D#$��DA$��DC$��Da$��Dc$��D�$��D�$��D�$��D�$��D�$��D�$��D�$��D%��D%��D!%��D#%��D@%��DA%��DC%��D`%��Da%��Dc%��D�%��D�%��D�%��D�%��D�%��D�%��D�%��D&��D&��D!&��D#&��D)&c�)&�ŀA&��DC&��DI&c��I&�ŀ`&��Da&��Dc&��i&cX�i&�ŀ�&��D�&��D�&c���&��D�&��D�&��D�&��D'��D'��D '�D#'��D@'�DC'��D`'�Dc'��D�'��D�'�D�'��D�'�D�'��D�'��D(��D (��D!(��D#(��D)(��D@(��DC(��DI(��Da(��Dc(��Di(��D�(��D�(��D�(��D�(c���(��D�(��D�(��D�(��D)��D)��D!)��D#)��Dc)��D�)��D�)��D�)��D�)��D*��D*��D!*��D#*��DA*��DC*��Da*��Dc*��D�*��D�*��D�*��D�*��D�*��D�*��D�*c���*��D�*��D�*c*�+��D+��D	+c��!+��D#+��D)+�F�A+��DC+��DI+c١a+��Dc+��D�+��D�+��D�+��D�+3�D�+��D�+��D,��D,��D!,��D#,��DA,��DD,3�Da,��Dc,��D�,��D�,��D�,��D�,��D�,��,��D�,��D�,���,��D�,��D-��D-��D!-��D#-��DA-��DC-��Da-��Dc-��D�-��D�-��D�-��D�-��D�-��D.��D#.��DC.��Dc.��Dd.3�D�.��D�.��D�.��D�.��D/��D#/��DC/��Dc/��Di/cg��/��D�/��D�/ct��/��D�/��D�/c���/��D�/��D�/c���/��D�/��D�/c��0��D0��D	0cˣ!0��D#0��DC0��Dc0��D�0��D�0��D�0��D�0��D�0��D�0��D�0��D1��D1��DC1��D`1��Dc1��D�1��D�1��D�1��D�1��D�1��D�1��D2��D 2��D@2��D�2��D�2��D�2��D3��D 3��D@3��D`3��D�3��D�3��D�3��D�3��D�3��D�3��D�3��D4��D4��D43�D 4��D�43�D7��D 7��D@7��D`7��D�7��D8��D�9��D`;��D�;��D�;��D`=��D`?��D�?�4��@��DB��D@D��D`E��D�F��D G���I��D�I��J�D�J�DK�D K�D@K�D`K�D�K�D�K�D�K�DL��D@L��D�L��D�L��D N��D@N��D@O��D�P��D�Q��DR��D R��D@R��D`R��D�R��D�R��D S��D`T��D�T��D�T��D�T��D`UC��U��`V���XK��X���X�YB� Y��@Y净Y��D�Y3�D�Y��D�Y6�Z��DDZ3�D�Z��D[��D`[��D�[��D�[��D�[��D�[��D\3�D�\� ]��D@]��D�]��D�]��D�]��D^��D ^��D@^��D`^��D�^��D�^��D�^��D_��D _��D@_<��_��D�_��D�_��D�_��D`���`�`�A��b��Dc��D c��D@c��D`c��D�c��D�c��D�c��D�c��Dd��D@d���d��D�d��D�e��D�e��D�e��D@f�fE�@g��D@j����j��D�j��D�j� kh�@kҌ mB�`m��@n)�o���o��D p��D@p��p��D q���q��Dr�`s����s��Dt��D!t��DAt��Dat��D�t��D�t��D�t��D�t��Du��D!u��DAu��Dau��D�u�ᐁu��D�u��D�u��D w��D@w��D`w��D�w��D@x��D`x��D�x��D�x��Dy��D�y��D�y��D�z��D�z��D�z��D�z��D{��D {�9�D{3�D�{���|��D |��D`|��D�|��D�|��D�}��D�}��D�}��D~��D ~��D@~��D@��D`��D���D������D���D����D���D��O��������� � ���D@���D`���D����D���� ����F�`�����������D���D ���D@���D`���D����D����D���D���D ���D@���D`���D����D����D��3�D`��X���������@���D`���D����D����D����D���D����D���D@���D`���D����D����D����D���D���D���\������`���D����D����D����D����D���D����D����D���D���D ���D@���D`���D����D����D ���D�������D����D����D ���D@���D���D����D ���D����D`���D���D����D����D@���D���D����D ���D����D����D`���D����D@���D����D���D ��}�`���D����D����D����D���D���D ���D@���D`���D����D����D������M������@���D �� ���3�D���D���D ���Dd�3�D��3�D�3�D���D���D@���D`���D����D����D����D����D����D ���D@���D`���D����D����D���D ���D����D����D����D���D ���D@���D`���D����D����D����D����D����D����D����D����D����D����D ���D@���D`���D����D����D ���D����D���D����D����D����D����D���D ���D@���D`���D����D����D ���D@���D`���D����D����D����D����D ���D@���D`���D����D����D����D����D����D����D ���D`���D����D����D����D���D���D����D���D@���D����D����D����D���D ���D@���D`���D����D����D@���D����D���D ���D`���D����D����D����D����D ���D`���D����D����D ���D ���D`���D����D����D ���D@���D`���D����D����D����D���D ���D����D����D����D ���D ���D@���D����D����D����D����D���D ���D@���D����D����D����D����D���D`���D����D����D���D ���D@���D`���D@���D`���D����D����D���D ���D@���D����D����D@���D`���D����D����D����D���D ���D`���D����D����D����D����D���D ���D@���D`���D@���D`���D����D����D����D����D����D���D���D ���D@���D`���D����D����D ���D@���D����D����D���D���D ���D`���D����D���D ���D`���D����D����D����D���D���D ���D����D����D����D���D���D����D����D���D ���D@���D`���D����D����D���D@���D`���D����D����D����D���D��D`��D���D���D���D���D���D���D ��D@��D`��D���D���D���D���D`��D���D���D���D���D��D ��D���D���D���D���D��D ��D@��D���D���D���D���D��D ��D@��D���D���D���D���D	��D@	����	��D
��D@
��D`
��D�
��D�
��D�
��D`��D���D���D���D��D ��D@��DY�]���O��8���.~���7���	 	d	z	�	�	�	�	�	
'
X
k
�
�
t�����R�
1
G
�
�
8n���w�
%}�����7��������*A_t���� 9LXdp����(:Ol��)Omy��	)2_m�����	!?GS_y������H�����U�
!�ht��
EJ�������_��  > j t � � � f!s!�!##U##�#�#$;$A$V$]$�$�$�$%#%%�%�%T&�&�&�&'$'1'N'`'�'�'�'�'�'�'�'(D(�(�(�(&)9)K)c)x)�)�)�)�)�)*{*�*�*�*.+7+x+�+�,�,�,�,�,I-]-c-$./k/0001070�0(1�1�12@2�2�2N3�3�35r5�56h6n6�6�6727:7@7�7g8�8
9O9':K:�:
;0;7;R;Y;_;�;�;�;�;�<�<= =X=^=�=>->2>q>w>�>
?)?/?d?�?�?�?�?�?@@=@C@i@o@t@@�@�@�@�@�@�@�@�@�@�@'A-A

$&-.057? B!H"I#P%W'^)_+`3h4k6t7�8�9�:�<�?�B�D�F�H�J�L�N�Q�T�U�V�X�Z�]�^�_�`�b�i�j�k�l�m�n�o�pqrs
tuvwx{|}~ �!�$�&�(�*�,�-�/�1�3�5�7�9�<�>�A�D�F�H�J�K�N�P�Q�V�[�`�a�b�h�i�n�s�y�{��������������������������������������������������������������������������������������������0�8�E�F�J�L�M�V�Y�\�^�_�b�e�k�o�p�s�xy���	��
���v�p��p�|�p%��p�x�pv8�pOP�p[O�p�A�ple�pw�p
�q:�q\�qWD�pj&q��0q��4q�{8qOPBqV��pOP�p[O�p�A�pv8�p�~Hqle�p�Sq�?�p�OXqԘbq%Zhq�hnq��p��pWtq�OXqv8�pOP�p[O�p�A�p�~Hq��ple�p�~HqqP�p=�qv8�pOP�p[O�p�A�ple�p�?�p�OXqrU�p!]�q�?�pB�p�W�q[c�pw]�q�<�p_��q�OXq�w�qх�q�"4q�?�p�a�qs�q�Z�q�6�qv8�p�~�qOP�p[O�p�A�p�~Hqle�pv8�pOP�p[O�p�A�pqP�p=�qle�p��p!]�qԘ�q�v�piv�q%Zhq%��p���qe<�p�?�pB�p�W�q[c�pw]�q�<�p!]�qrU�p%��p��p�|�p[O�p�A�pv8�pOP�pqP�p=�q�~Hq��ple�pWh�q�B�q�L�q9�q-!�q*��q�q��q���qzM�q�8�q���qtY�q|f�q�#�q�I�qن�q�U�q�Y�q�U�q�H�q�5�qL�q�L�q�5�q�j�qS#�qs#�q�H�q<H�q#�q�"�q�4�q�4�q�I�qJ�q�#�q6�q7y�q���q�]�qAA�q(#�qkh�q�7�qb�qz=�q��q�Z�qՃ�qE!�qă�qu"�q6^�qzJ�qS��qS8�q��q�R�qB�q,�q��q��q��q$b�p�=�pX!�pqP�p|w�q9"4qRqf{rv8�p�]r�r�;�p�W�qsrl8+rv0r$b�p�=�p9"4qqP�pRqX!�pf{r�r�;�p�W�qv0r�:�p�u�ps6rOBr�~Hr�6Nr0}XrVbrNW�p�Zlr�brr�6xr�brr�I~r�6�r9z�r ��r��r��0q�T�r|:�p�I�rxS~r옮r!]�r�?�r�e�r�J4qYS0q!]�q�\�rE�p_�r��p��r��p�y�r��0q�T�r��pd��r�64qz�rd��p�r�=�pOBr\��pV��pz�r�As%Z�p�
sZC4q�r�=�pOBr\��pV��pz�rJdsS�0q�r�=�pOBr\��pV��pz�r�x�p�?�p�s��#sqQ0qz�rJdsS�0qJdsS�0qJdsS�0q-��p-��pJdsS�0q�)sJdsS�0qJdsS�0q��0q�T�r��0q�T�r194q��0q�T�r��0q�T�r��4q)S4q�T4q�n�p5e5s194q�Es�KsKW�p!W�p5eUsNW�p�I�r�?_s�J�p194q5ees$V4q�V�p5eusVi�sV�s194q5eUs194q|:�pԘbqPi�s�6�s�?�p�W�qTe�so~�s�x�s7~�s��0q��4q�?�p�W�q�W�q|w�sky�sv8�pOP�p[O�p�A�ple�p�P�sÁ�s~��sV��sw��s�W�q�?�p?7t�6�p��0q��4q$d	t�Tt�T t��0q��4q��&t�z/t�T:t��~rބ~r��4qȄ4q��4q�e4qxxAt��4q�WOtrUZt�A�p�cZt�cZtw]�qK!�pf{rK!�p�r<uct�6it�6ot�6ut�6{t�6�tV�te<�p�6�t�6�t�6�t�6�t�6�t`n�tMU�t`n�tMU�t�I~r�D4q�}�s�D4q�D4q<uctXA�p�rFk�rV�t�f�t�D4q�D4q�D4q�D4q�D4q�D4q�D4q�D4q�D4q�D4q�D4q�D4q*j�ttO�pf0qK^0q���qn��r�~rn��r9��tn��r��tn��r�R	uOBrs��q��Bqn��r���pn��r���pn��r���pn��r��un��r��_sn��r�Esn��r�Esn��r�6u�Esn��r�Esn��r�Esn��r>�un��r��_sn��r�?�pc9�p�=�p�4qB!u�I4q�t!uE"4q��%ue%u�]�p�}+u�}5ua}5u�y5ufz=u�?�p�!4q�P!u�:�pPJAu�?�p�]�p�}
sa}
s�"5u^�p�4q�I4qu}�p�"5u�"�p��_sn��r9��tn��r���pn��r��Bqn��r��Bqn��re��pn��re��pn��r��Bqn��r�Esn��r͉lrn��r͉lrn��r͉lrn��r�Eun��r͉lrn��r	!
"#$%&(-.78D!E#F%P'Q)R+S+Y-Z/[1\3]5_7b9c;d=h?lAmCnEoG�I�K�M�O�Q�S�U�W�Y�[�]�_�a�c�e�g�i�k�m�o�q�s�u�w�y�{�}��������������������������������������������������������������������������������������������������*�+�,�/�0�1�2�3�4�5�6�8�D�E�F�G�H�I�J�K�L�M�N�O�P�QRSTU	VW
XYZ[\]^_`a!b#c%d'e)f+g-h/i1j3k5l7m9n;o=p?qArCsEtGuIvKwMxOyQzS{U|W}Y~[]�_�a�c�e�g�i�i�k�k�m�m�o�o�q�s�s�u�u�w�y�y�{�{�}�}������������������������������������������������������������������������"�+�7�H�`�d�f�j�k�q�r�z�����������������������������������������������������������������������������������	�		



!!# #!%%'&',)-)/+:-;/J1T3U5f7g9p;q=z?~AC�E�G�I�K�M�O�Q�S�U�W�Y�[�]�_�a�c�c�e�e�g�g�i�i�k�m�o�q�s�s�u�u�w�y�{�}��������������������������	���!�"�#�$�8�9�:�;�>�I�J�K�L�M�U�V�W�X�Y�Z�[�\�]�j�k�l�m�n�p�t����������������������������������������������������������������������������			

#(.5:?D!I#T%U'[)\+b-i/n1o1s3w5{7|7}9~9;�;�=�=�?�A�A�C�E�G�I�K�M�O�Q�S�U�W�Y�[�]�_�a
cegi-k/m5o7qDsEsFuGuHwQyS{}�����������������
����!�,�.�4�6�O�Q�^�`�r�t�x�y�z�{�|�}�~�����������������������������������������������������������������������	!#
+-46<>DFRT!�#�%&3b3�3V�3`4j�3�83�B3�Z3�h3��3�D	3�n	}��	��	3��	��'�)�+�-�/�1�3�,'�.)�27�4-�6/�89�:3�R'�T)�Z;�\-�^/�`=�b3�f'�h)�j?�l-�n/�E�G�'�)�I�-�/�K�3�E�G�E�G�E�G�E�G�'�)�[
-
/
]
3
'
)
[
-
/
]
3
' 
)"
[$
-&
/(
]*
38
E:
G<
E>
GH
EJ
GL
EN
GP
ER
G T
E V
G!X
E!Z
G$f
E$h
G%j
E%l
G&n
E&p
G)~
E)�
G,�
E,�
G-�
E-�
G.�
E.�
G/�
E/�
G0�
'0�
)0�
c0�
-0�
/0�
e0�
31�
E1�
G5�
E5�
G6�
E6�
G8�
'8�
)8�
g8�
-8�
/8�
i8�
39�
E9�
G:�
E:�
G;�
E;�
G<�
E<�
G=�
E=�
G@E@GAEAGBEB
GCECGDEDGE'E)EkE-E/F"'F$)F(kF*-F,/LT'LV)LXkLZ-L\/L^oL`3Md'Mf)MhkMj-Ml/MnoMp3V�'V�)V�kV�-V�/V�oV�3Y�'Y�)Y�qY�-Y�/Y�sY�3\�'\�)\�g\�-\�/\�i\�3eZ'e\)e^ge`-eb/edief3fhEfjGizEi|Gk�'k�)k�;k�-k�/k�=k�3l�El�Gm�Em�Go�'o�)o�[o�-o�/o�]o�3p�'p�)p�Ip�-p�/p�Kp�3s�'s�)s�Is�-s�/s�Ks�3x�'x�)x�yx�-x�/x�{x�3y'y)yyy-y
/y{y3�<'�>)�BI�D-�F/�HK�J3�N'�P)�Vk�X-�Z/�\o�^3�b'�d)�h��j-�l/�n��p3�t'�v)�x��z-�|/�~���3��'��)�����-��/�����3��'��)�����-��/�����3�8'�:)�<��>-�@/�B��D3$4IPW]go}����������
&/5;DMVcpx��������������
"*2:GPXgow~������������	%1:JVaqy�������������
&/8AJWdp|����-GYk����LRY~�8JX������P�����
	.	B	\	j	�	�	�	�	-
q
�
�
�
4GO����&KVcr��

)
9
Q
s
�
����P^�����2Yu�����'/W��:BY���0Ge~���	&?|�����r����6>F�!����8o#m|�����5C]v}����9���������K[mu���D���������.x���&.6>Si��������. 6 E L � � � � � � � !!9!G!�!�!�!"!"F"o"�"�"#A#a#k#�#�#�#�#$'$0$e$q$�$�$�$�$%A%N%r%�%�%�%&!&6&k&�&�&�&�&�&';'C'�'�'�'�' (5(g(�(�)�)�)&*>*i*�*�*++>+E+j+~+�+�+�+�+�+�+�+",7,G,`,�,�,�,T-�-�-�-�-�-.s.|.�.�.�.�.�.�.�.�.1/:/C/Z/�/�/�/�/�/�/�/t0}0�0�0�0�0�01
1�1�1�2�2$3;3E4W4i4{4�4�4�4�4�4�4�5�5�5�5P6�6�6 7�7�7�7�7�7�78*878.959<9�9�9�9�9:�;�;�;<3<S<�<�<�<�<=
=s=�=�=�=�=�=�=�=�=�=>I>i>�>�> ?K?T?\?�?�?�?�?�?�?@A�
�
��dOAu�4A�4=A�y
FA�b�w�c��������	��������� !	!
"''
59??BBDLNQTTTcceehh h!h"h#h$h%h&i'j(l)l*l+l,m-o.p/p0p1s2u3v4v5v6v7w8z9{:{;{<|=|>}?}@}A~B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�����������������������������^�b����T��ЗЖ^HЗЗЗ�ЗЖ^H �T$�.�x��������Ė�cSP�X�Z�\�^�h�jЖj^Hn�p��^H����^H�������^H�������^H����^H�^H�^H��5��[��T�����D���������T����T����T��������������D�D�*�XcSs������������Ж�^H�Ж�^H�Ж�^H�Ж�^H�Ж�^H�Ж�^H����������-�^H�5�D��D��B�t_Lco��	�!
�H
�}
��
��
�
t�'�/FE�ItBcA
Ie�
�Lr�
�	��YrBr	�Cr'Lc�IL����Lr��Lc`#�
5���	��
��cdQwS�U���g	�;�P�n����3�FR^j�vc���g����cF�
Q�"�.Q4|��#s;�sc�i���MY��wUwIw�L�L�L�c0
��w�wQv5w���w���c��(cH�'�,,	,e,�
,i��'���/:�Y�n��c�I�c��(c8�@�����������( �(�(I(�^ '���!55"c�"c�"�5"M�#�$��$�L��&��&!'�'�'�+'�Be'k'u'	{'�{'�����'��'�	��
��](w�)�)�)�)� )�!B��)����)��*wB��*���e+c,��c+,�2,-�,!���,c�,Y-Y9-c�-��-��-}.��.'�.�/�L/��/�0��0��0	1)	^1I	�1Y	�1a	22�|2��2��2��2�23�13c3�w3��3)	�3)	�4c�4)	`5)	�5)		6�	B6�_6I4)	�6c�6��6�7�)7��7��7��7
D8
�8��8��8��8�C95�9�	:a	?:��:��:�;�$;�r;����;��;��;��;�;cD<�d<�d<r<�;c(��<c�<��<c=c:=�
�w/�5�=�
�=��=I�=��=c���=/�=c�=;�=c>,{'�
����=�\>�}�>}�>a	�>�B?��?�( �@�
Q�	��$��@	
ZZZllZ Z!Z0r0v2l5Z6ZFZGlKZZZ[Z\Z]Z_l`ld�<.cctor>b__13_10<found>5__10<IsChannelAvailable>d__10<.cctor>b__13_20<.cctor>b__13_30<.cctor>b__13_40<>c__DisplayClass10_0<>c__DisplayClass20_0<>9__0_0<Consolidate>b__0_0<.ctor>b__0_0<ProcessTableIndexes>b__0_0<GetPermutations>b__0_0<>c__DisplayClass0_0<>9__11_0<get_IncludedColumnsOrdered>b__11_0<>c__DisplayClass11_0<>9__21_0<get_KeyColumnsOrdered>b__21_0<>c__DisplayClass21_0<>9__41_0<get_KeyColumnOrderedTypes>b__41_0<>9__1_0<.ctor>b__1_0<GetCombinations>b__1_0<>9__12_0<FormatVariableValueString>b__12_0<QueryKey>b__12_0<>c__DisplayClass12_0<>9__22_0<Add>b__22_0<AddRuleset>b__22_0<>c__DisplayClass22_0<TryGetObjectValue>g__TryGetValueFromProperties|22_0<>9__2_0<Duplicates>b__2_0<>c__DisplayClass2_0<>9__13_0<.cctor>b__13_0<GetProbeErrors>b__13_0<>9__23_0<get_AllColumnsOrdered>b__23_0<>c__DisplayClass23_0<>9__43_0<get_KeyColsDataLengthBytes>b__43_0<>9__3_0<Transform>b__3_0<Run>b__3_0<>c__DisplayClass3_0<AreEqual>g__NormalizeParams|3_0<>9__14_0<GetEnumerator>b__14_0<GetPermutations>b__14_0<>c__DisplayClass14_0<>9__4_0<GetHashCode>b__4_0<Execute>b__4_0<ToWarning>b__4_0<get_Total>b__4_0<Transform>b__4_0<>c__DisplayClass4_0<>c__DisplayClass15_0<>9__5_0<GetNames>b__5_0<ThrowOnErrors>b__5_0<>c__DisplayClass5_0<>9__16_0<GetContexts>b__16_0<>c__DisplayClass16_0<>c__DisplayClass36_0<>9__6_0<get_BenefitsFromCache>b__6_0<>c__DisplayClass6_0<>9__17_0<GetHashCode>b__17_0<>9__37_0<get_KeyColumns>b__37_0<>9__7_0<ApplyTo>b__7_0<>c__DisplayClass7_0<>c__DisplayClass28_0<>9__8_0<GetAggregate>b__8_0<ToDebugString>b__8_0<GetDataImpl>b__8_0<>9__19_0<get_OrderedColumns>b__19_0<>9__39_0<ProcessRequestAsync>b__39_0<get_IncludedColumns>b__39_0<>9__9_0<GetAggregate>b__9_0<GetNames>b__9_0<get_IsEmpty>b__9_0<>c__DisplayClass9_0<>9__0<GetOrAdd>b__0<EvaluateCore>b__0<GetAssessmentResultsListCore>b__0<Substitute>b__0<FindValue>b__0<TryGetRefValue>b__0<TryGetValue>b__0<Remove>b__0<Specialize>b__0<IndexOf>b__0<ToString>b__0<IsMatch>b__0<get_Item>b__0<Transform>b__0<UpdateCharacteristics>b__0<Equals>b__0<Contains>b__0<GetAssessmentResultsList>b__0<GetData>d__0<ProcessTableIndexes>d__0<GetPermutations>d__0arg0<ReadNamedExpression>g__ReadOperands|0<.cctor>b__13_11<GetData>d__11<Transform>d__11<UpdateCharacteristics>d__11<GetAssessmentResults>d__11<CollectKeys>d__11<.cctor>b__13_21<FilterContexts>d__21<.cctor>b__13_31<.cctor>b__13_41<>9__0_1<ProcessTableIndexes>b__0_1<>9__41_1<get_KeyColumnOrderedTypes>b__41_1<>9__1_1<.ctor>b__1_1<GetCombinations>b__1_1<>9__2_1<Duplicates>b__2_1<.cctor>b__13_1<>9__43_1<get_KeyColsDataLengthBytes>b__43_1<>9__3_1<Transform>b__3_1<AreEqual>g__NormalizeNumericParams|3_1<>c__DisplayClass16_1<>9__6_1<UpdateCharacteristics>b__6_1<>9__37_1<get_KeyColumns>b__37_1<>c__DisplayClass28_1<>9__8_1<GetDataImpl>b__8_1<>9__19_1<get_OrderedColumns>b__19_1<>9__39_1<get_IncludedColumns>b__39_1<>9__9_1<GetAggregate>b__9_1<>8__1<Transform>b__1<GetPermutations>b__1<GetContexts>b__1<AddRuleset>b__1<QueryKey>b__1<Transform>d__1<IsPresent>d__1<Apply>d__1<>u__1<>c__DisplayClass2_0`1<>c__3`1<Run>d__3`1Func`1SingleToolProbe`1Range`1IItemChange`1Nullable`1IComparable`1IEnumerable`1IOrderedEnumerable`1IEquatable`1ConfiguredTaskAwaitable`1Predicate`1Task`1Literal`1DependentTool`1InPlaceTransform`1ChangeTransform`1OverwriteTransform`1UnitTransform`1NonstrictComparisonExpression`1ICollection`1IReadOnlyCollection`1IPattern`1CompositePattern`1ConjunctionPattern`1DisjunctionPattern`1ComplementaryPattern`1AsyncTaskMethodBuilder`1IComparer`1ReferenceComparer`1IEqualityComparer`1RangeConverter`1JsonConverter`1RangeListConverter`1IEnumerator`1ISet`1AtomicSet`1HashSet`1ConcurrentSet`1IList`1RangeList`1PatternList`1IReadOnlyList`1EvaluationContext`1get_WarningCheckSkipped1get_FieldName1fieldName1get_Value1value1arg1obj1get_Item1<>7__wrap1CS$<>8__locals1<>m__Finally1<Transform>g__ParseColumn|1<.cctor>b__13_12<ReadSequence>d__12<QueryKey>d__12<.cctor>b__13_22<GetDataAsync>d__22<.cctor>b__13_32UInt32<.cctor>b__13_42<>9__0_2<ProcessTableIndexes>b__0_2<>9__41_2<get_KeyColumnOrderedTypes>b__41_2<.cctor>b__13_2<>c__DisplayClass16_2<>9__6_2<UpdateCharacteristics>b__6_2<>9__37_2<get_KeyColumns>b__37_2<>9__39_2<get_IncludedColumns>b__39_2<command>5__2<semaphore>5__2<i>5__2<connection>5__2<heap>5__2<buffer>5__2<selector>5__2<confirmedServices>5__2<confirmedRoles>5__2<lines>5__2<items>5__2<confirmedPermissions>5__2<results>5__2<skippedContexts>5__2<keys>5__2<result>5__2<parent>5__2<view>5__2<>9__2<GetCombinations>b__2<ReadRanges>d__2<>u__2<>c__DisplayClass1_0`2<>c__1`2<GetCombinations>d__1`2Func`2MultipleItemChange`2Tuple`2IGrouping`2KeyValuePair`2IChangeAccessor`2IMultipleChangeAccessor`2SortedList`2IDictionary`2ListBiDictionary`2PatternDictionary`2ConcurrentDictionary`2IReadOnlyDictionary`2get_WarningCheckSkipped2get_FieldName2fieldName2get_Value2value2arg2obj2get_Item2<>7__wrap2<>m__Finally2<Transform>g__ApplyPattern|2<.cctor>b__13_13<QueryName>d__13<.cctor>b__13_23<.cctor>b__13_33<GetOpenedConnectionAsync>d__33<.cctor>b__13_43<>9__0_3<ProcessTableIndexes>b__0_3<.cctor>b__13_3<>c__DisplayClass16_3<command>5__3<runSpace>5__3<tree>5__3<i>5__3<total>5__3<tool>5__3<connection>5__3<errorGroup>5__3<reader>5__3<subKeys>5__3<waitList>5__3<resultList>5__3<row>5__3<GetDataImpl>d__3<ExecuteLines>d__3<>u__3Func`3SingleItemOrArrayConverter`3get_WarningCheckSkipped3obj3<>7__wrap3<Transform>g__MatchToDictionary|3<.cctor>b__13_14<ReadMeasurementsAsync>d__14<GetServices>d__14__StaticArrayInitTypeSize=24<.cctor>b__13_24<Invoke>d__24<GetTags>d__24<.cctor>b__13_34<GetImplementedChecks>d__34<.cctor>b__13_44UInt649B0C257D89782D17D9AFCD55037CCAF565EE46A3DD0EA068E476FC9D568B0A84<>9__0_4<ProcessTableIndexes>b__0_4<.cctor>b__13_4<>9__16_4<Transform>b__16_4<>c__DisplayClass16_4<cache>5__4<done>5__4<i>5__4<patternTail>5__4<reader>5__4<keyParameter>5__4<parameter>5__4<services>5__4<contexts>5__4<hiveQuery>5__4<ReadSequence>d__4<Execute>d__4<ToWarning>d__4<ExecuteTextReader>d__4Func`4<>7__wrap4<.cctor>b__13_15<Touch>d__15<GetResultSets>d__15<GetServiceAccount>d__15<.cctor>b__13_25<GetData>d__25<.cctor>b__13_35<.cctor>b__13_45<.cctor>b__13_5<command>5__5<instanceName>5__5<i>5__5<column>5__5<valueNameParameter>5__5<checkRequirements>5__5<ProcessTableIndexes>b__5<ReadSequence>d__5<GetDataImpl>d__5<Transform>d__5<GetNames>d__5<TransformRows>d__5<>7__wrap5<Transform>g__CapturesToDictionary|5<.cctor>b__13_16UInt16<.cctor>b__13_26<GetChecksCore>d__26<CollectCharacteristics>d__26<.cctor>b__13_36<GetAssessmentResultsListCore>d__36<>9__0_6<ProcessTableIndexes>b__0_6<.cctor>b__13_6<role>5__6<value>5__6<reader>5__6<pair>5__6<keyList>5__6<prefix>5__6<channelKey>5__6<Transform>b__6<UpdateCharacteristics>d__6<>7__wrap6<.cctor>b__13_17<.cctor>b__13_27<GetChecksCore>d__27<GetNewChecks>d__27<.cctor>b__13_376B31F522CD735CBC9C722C1616A96DB65290F26857DC090182D85C7F7B981DC7<>9__0_7<ProcessTableIndexes>b__0_7<.cctor>b__13_7<UpdatePresence>d__7<Update>d__7<Execute>d__7<Transform>d__7<GetEnumerator>d__7<UpdateCharacteristics>d__7<GetNames>d__7<.cctor>b__13_18<.cctor>b__13_28<GetDataAsync>d__28<Specialize>d__28<.cctor>b__13_38<.cctor>b__13_8<serviceKey>5__8<GetDataImpl>d__8<UpdateCharacteristics>d__8<EnumKeys>d__8<.cctor>b__13_19<.cctor>b__13_29<.cctor>b__13_39<ProcessRequestAsync>d__39<>9<.cctor>b__13_9<svcName>5__9<UpdateNamed>d__9<GetDataImpl>d__9<GetEnumerator>d__9<UpdateCharacteristics>d__9<Module><PrivateImplementationDetails>System.IOTTXTYvalue__System.DataMicrosoft.SqlServer.Management.Assessment.Dataget_Dataget_ExtraDataextraDataget_ErrorFailedObtainProbeDataget_ErrorEvalMissingDataTryGetOwnDataTryGetDataInitDatarawDataGetRowDatadatasb<>caccspecrecIsNumericSystem.Collections.GenericToolTypesStaticroundFuncIAggregateFuncArrayAggregateFuncMinimumFuncMaximumFuncStringJoinFuncCountFuncfuncGetDataAsyncReadAsyncOpenAsyncGetOpenedConnectionAsyncExecuteScalarAsyncExecuteReaderAsyncReadMeasurementsAsyncWaitAsyncProcessRequestAsyncdoc<>3__src<<ReadNamedExpression>g__ReadOperands|0>dget_Idset_Idget_CurrentManagedThreadId<>l__initialThreadIdprobeIdget_CheckIdget_ErrorInvalidCheckIdget_StringCheckIdcheckIdPowerShellCommandHeadReadheadLoadSystem.Collections.Generic.ICollection<Microsoft.SqlServer.Management.Assessment.Probes.ProbeFamily>.AddGetOrAddTryAddget_IsIncludedisIncludedAddImpliedGetImpliedget_Enabledset_Enabledget_IsDisabledisDisabledget_Failedset_Failedget_ErrorConditionEvaluationFailedUpdateNamedget_IncludedColumnsOrderedget_AllColumnsOrderedget_KeyColumnsOrderedget_ErrorNameFieldIsRequiredget_ErrorVersionFieldIsRequiredget_ErrorCheckModificationSelectorResuiredget_ErrorStringOrObjectExpectedget_ErrorStringArrayOrObjectExpectedexpectedget_ErrorRecursionDetectedAwaitUnsafeOnCompletedget_IsCompleted<>3__unimplementedget_ErrorJsonSerializationNotSupportedNewGuid<FieldName1>k__BackingField<Value1>k__BackingField<FieldName2>k__BackingField<Value2>k__BackingField<Data>k__BackingField<ExtraData>k__BackingField<CheckId>k__BackingField<IsIncluded>k__BackingField<Enabled>k__BackingField<IsDisabled>k__BackingField<Failed>k__BackingField<Instance>k__BackingField<Reference>k__BackingField<CharacteristicProviderSource>k__BackingField<Message>k__BackingField<AssessmentMessage>k__BackingField<Table>k__BackingField<Name>k__BackingField<FieldName>k__BackingField<ProbeName>k__BackingField<TypeName>k__BackingField<OriginName>k__BackingField<ParameterName>k__BackingField<ServerName>k__BackingField<DisplayName>k__BackingField<FamilyName>k__BackingField<Line>k__BackingField<Define>k__BackingField<Type>k__BackingField<ItemType>k__BackingField<ImplementationType>k__BackingField<ObjectType>k__BackingField<TargetType>k__BackingField<UseDatabase>k__BackingField<Template>k__BackingField<Value>k__BackingField<IsUnique>k__BackingField<Size>k__BackingField<Eof>k__BackingField<PresenceFlag>k__BackingField<Morph>k__BackingField<Path>k__BackingField<TargetPath>k__BackingField<CallStack>k__BackingField<Check>k__BackingField<HelpLink>k__BackingField<Original>k__BackingField<KeyOriginal>k__BackingField<Level>k__BackingField<Call>k__BackingField<NotNull>k__BackingField<Eol>k__BackingField<BaseTool>k__BackingField<Trim>k__BackingField<Transform>k__BackingField<Platform>k__BackingField<Children>k__BackingField<Flatten>k__BackingField<Join>k__BackingField<Column>k__BackingField<ValueColumn>k__BackingField<KeyColumn>k__BackingField<Version>k__BackingField<SchemaVersion>k__BackingField<OriginVersion>k__BackingField<Configuration>k__BackingField<Implementation>k__BackingField<Connection>k__BackingField<EngineEdition>k__BackingField<Condition>k__BackingField<FilterDefinition>k__BackingField<LinePosition>k__BackingField<Exception>k__BackingField<Description>k__BackingField<StringComparison>k__BackingField<Urn>k__BackingField<Pattern>k__BackingField<NamePattern>k__BackingField<ServerNamePattern>k__BackingField<GetPattern>k__BackingField<ReadsRatio>k__BackingField<Map>k__BackingField<Rep>k__BackingField<Timestamp>k__BackingField<Char>k__BackingField<LineNumber>k__BackingField<Reader>k__BackingField<Scheduler>k__BackingField<Grouper>k__BackingField<ResultGrouper>k__BackingField<Comparer>k__BackingField<Parser>k__BackingField<TargetFilter>k__BackingField<Accessor>k__BackingField<Separator>k__BackingField<FillFactor>k__BackingField<Selector>k__BackingField<ProbeNameAlias>k__BackingField<Logics>k__BackingField<FailedCharacteristics>k__BackingField<KnownCharacteristics>k__BackingField<CheckIds>k__BackingField<Probes>k__BackingField<Indices>k__BackingField<Ranges>k__BackingField<CheckChanges>k__BackingField<MissingDependencies>k__BackingField<Rules>k__BackingField<Lines>k__BackingField<Types>k__BackingField<Tags>k__BackingField<CallsAndMorphs>k__BackingField<Items>k__BackingField<Columns>k__BackingField<CheckSpecializations>k__BackingField<CheckDefinitions>k__BackingField<Options>k__BackingField<InnerProbeExceptions>k__BackingField<InnerExceptions>k__BackingField<Parameters>k__BackingField<Errors>k__BackingField<Rulesets>k__BackingField<CurrentRulesets>k__BackingField<Hits>k__BackingField<Requirements>k__BackingField<Arguments>k__BackingField<Subject>k__BackingField<Distinct>k__BackingField<Target>k__BackingField<Left>k__BackingField<IncludesLeft>k__BackingField<Right>k__BackingField<IncludesRight>k__BackingField<Result>k__BackingField<Element>k__BackingField<Document>k__BackingField<SpecList>k__BackingField<ErrorList>k__BackingField<DispatchPost>k__BackingField<CommandText>k__BackingField<BaseContext>k__BackingField<CheckContext>k__BackingField<EvaluationContext>k__BackingField<GlobalEvaluationContext>k__BackingField<SystemEvaluationContext>k__BackingField<BaseRow>k__BackingField<IsPrimaryKey>k__BackingField<Query>k__BackingField<Inventory>k__BackingField<Registry>k__BackingField<Severity>k__BackingField<Empty>k__BackingFieldYieldBitAndTrimEndIDbCommandBuildCommandPrepareCommandCreateCommandcommandAppendFindget_ErrorImplementationWasNotFoundget_ErrorKeyNotFoundmethodStandardnetstandardCreateRecordIProbeTProbeDbaProbeReadStandardProbeWmiProbeReadExternalProbeCmdShellProbePowerShellProbeSqlProbeServerVersionProbeReadClrProbeRegistryProbeprobeTCollectionInterfaceReplaceget_ErrorValueEndsWithWhiteSpaceget_ErrorValueStartsWithWhiteSpaceget_ErrorValueCannotBeNullOrWhiteSpaceIsNullOrWhiteSpaceIsWhiteSpaceRunSpace<>3__runSpaceXNamespaceserviceget_Instanceset_InstanceManagedInstanceCreateInstanceComposeByInstanceinstanceget_ReferenceProbeReferencereferenceUpdatePresenceReadSequencesequenceget_DataSourcedataSourceget_CharacteristicProviderSource<>3__providerSource<>3__sourceCreateOverrideDividefuncCodemorphCodeGetHashCodeoperationCodeXNodeget_Unicodeget_Messageset_MessageBuildMessageget_UnsupportedTargetCheckMessageGetMessageget_AssessmentMessageset_AssessmentMessageget_NotEnoughPermissionsToRunAssessmentMessagemessageAddRangeget_ErrorIndexOutOfRangeInsertRangeReadChangeCheckChangeReadReplaceItemChange<>3__itemChangeReadTargetChangeget_ErrorCheckTargetChangechangeuseCacheget_BenefitsFromCachecacheEndInvokeBeginInvokeget_TableICloneableIsChannelAvailableIsAvailableIsNullableIComparableIEnumerableIDisposableYieldAwaitableConfiguredTaskAwaitableDoubleRuntimeFieldHandleRuntimeTypeHandleGetTypeFromHandleSingleTupleCheckRulecheckDefinitionRuleXNameget_Nameset_Nameget_FieldNameset_FieldNamefieldNameget_ProbeNameprobeNameGetInstanceNameinstanceNameTableNamevariableNametableNameget_TypeNametypeNamedatabaseNameGetCliNameget_FullNamecolNameErrorStreamNameProgressStreamNameGetStreamNameOutputStreamNamedataItemNameget_OriginNameset_OriginNameLineColumnNamelineColumnNameConfigurationNameJsonNameCommaGroupNameGetGroupNameLeftBracketGroupNameRightBracketGroupNameLeftGroupNameRightGroupNamegroupNameget_ParameterNameset_ParameterNameNameParameterNameparameterNameget_ServerNameset_ServerNameattrNameGetNameset_TargetNamerulesetNamedefaultNameelementNameSecurableNameArgumentNameSecurableClassArgumentNameAttributeContextNameIndexNameReadFuncByNameReadMorphByNameget_DisplayNameset_DisplayNameget_UnsupportedTargetCheckDisplayNameGetDisplayNamekeyNameget_FamilyNameset_FamilyNameQueryNameIdPropertyNameEnabledPropertyNameMessagePropertyNameServerNamePropertyNameDisplayNamePropertyNameItemTypePropertyNameHelpLinkPropertyNameLevelPropertyNameTransformPropertyNamePlatformPropertyNameVersionPropertyNameImplementationPropertyNameEditionPropertyNameConditionPropertyNameDescriptionPropertyNameTargetFilterPropertyNameAliasPropertyNameProbesPropertyNameTagsPropertyNameParametersPropertyNameClassPropertyNameTargetPropertyNameAssemblyPropertyNamepropertyNamenameDateTimeget_LineAppendLineCreateLineCombineget_DefinePersonalOrDesktopEngineIAsyncStateMachineSetStateMachinestateMachineNoneGetSqlConnectionCloneCharactersToEscapeget_Typeset_Typeget_NodeTypeXmlNodeTypeChangeTypeIsNullableTypeget_IsValueTypeOfTypeGetUnderlyingTypechannelTypetoolTypeget_ItemTypeset_ItemTypeOverrideItemTypeDefinitionItemTypeget_ErrorUnrecognizedChecksItemTypeJTokenTypeget_TokenTypeCheckTokenTypetokenTypeget_ImplementationTypeset_ImplementationTypeget_ObjectTypeSqlObjectTypeobjectTypeGetTypeget_TargetTypetargetTypeget_Unsupported_PowerShell_parameter_typeCompareWhereTryGetDataCoreEvaluateCoreGetChecksCoreGetAssessmentResultsListCoreprocedureCharacteristicFailureget_Cultureset_CultureresourceCultureget_InvariantCultureget_CurrentCultureCaptureAzurevalueInUseget_OrdinalIgnoreCaseChangeDatabaseAzureDatabaseget_UseDatabaseset_UseDatabaseStretchDatabaseReleaseEnterpriseSystem.IDisposable.DisposeTryParseReverseDataWarehouseGetProbeCallCandidateConsolidateAddOrUpdateCreateParserDelegateMulticastDelegateGetAggregateget_Templateset_TemplateCommandTemplatemessageTemplatetemplatePopulateget_StateEditorBrowsableStateConnectionState<>1__stateEvaluateget_CanWriteIAssessmentNoteXAttributeCompilerGeneratedAttributeGeneratedCodeAttributeDebuggerNonUserCodeAttributeNeutralResourcesLanguageAttributeDebuggableAttributeEditorBrowsableAttributeAssemblyTitleAttributeAsyncStateMachineAttributeIteratorStateMachineAttributeDefaultValueAttributeAssemblyTrademarkAttributeTargetFrameworkAttributeDebuggerHiddenAttributeExtensionAttributeAssemblyFileVersionAttributeAssemblyInformationalVersionAttributeAssemblyConfigurationAttributeInternalsVisibleToAttributeDefaultMemberAttributeJsonConverterAttributeJsonConstructorAttributeHasAttributeFlagsAttributeCompilationRelaxationsAttributeJsonObjectAttributeAssemblyProductAttributeAssemblyCopyrightAttributeCLSCompliantAttributeDebuggerDisplayAttributeParamArrayAttributeAssemblyCompanyAttributeRuntimeCompatibilityAttributeJsonPropertyAttributeExecuteShouldSubstituteSByteget_ErrorConverterCannotReadJSONValueTValueget_Valueset_ValueFindValuesingleValueget_ErrorConverterCannotWriteValueTryGetRefValuehasExistingValueexistingValueget_ErrorJsonWrongValueTryGetCliValuelocalValueTryGetNilValueget_HasValueTryGetObjectValueTryGetValueSetValuesqlDateTimeDefaultValuenewValueKeyValueGetPropertyValuevalueget_IsUniqueisUniqueHivehiveget_ErrorJsonSingularRangeInclusiveget_ErrorJsonSingularLeftRangeInclusiveget_ErrorJsonSingularRightRangeInclusiveTryRemovexeget_SizecolTypeSizeKeySizeSpecializeSerializeDeserializeget_ErrorProbeInitializeNormalizeSplitIfIsSupersetOfLastIndexOfprobeRefget_Eofset_Eofget_PresenceFlagset_PresenceFlagHasFlagEngineConfigLoadJsonConfigSystem.ThreadingEncodingTypeNameHandlingset_NullValueHandlingset_DefaultValueHandlingset_PreserveReferencesHandlingCeilingSystem.Runtime.VersioningToWarningRequirementsWarningIAssessmentWarningToBase64StringReadStringget_ErrorValueIsAWhiteSpaceStringGetVariableStringFormattableStringEscapePowerShellDoubleQuoteStringFormatVariableValueStringGetVariableValueStringToDebugStringToStringReadAsStringGetStringassemblyStringget_ErrorEmtyStringget_ErrorValueIsAnEmptyStringSubstringexistingargMicrosoft.SqlServer.Management.Assessment.Configuration.IPattern<System.String>.IsMatchget_ErrorEvalTypeMismatchTouchget_Morphset_MorphIDataMorphRenameDataMorphCompositeDataMorphFlattenDataMorphNoDataMorphdataMorphRowWiseCachedMorphMultidimensionalCachedMorphAggregateProbeMorphStringFieldParseMorphCreateMorphReadCompositeMorphToStringMorphIMultidimensionalMorphIndexDefinitionMorphDbInfoMorphDuplicateIndexesMorphRedundantIndexesMorphNameValuePairsMorphIRowMorphExtValueRowMorphIndexMorphmorphComputeStringHashfreshPublishMathget_Pathget_TargetPathtargetPathkeyPathpathget_Lengthset_LengthUnionWithStartsWithIntersectWithSplitWithExceptWithWmiobjAsyncCallbackcallbackget_CallStackICheckget_CheckCreateCheckWarningCheckIQuasiCheckUnsupportedTargetCheckCreateNewCheckcheckPeekget_HelpLinkset_HelpLinkhelpLinkget_Taskget_CompletedTaskCriticalDecimalget_OrdinalCompareOrdinalordinalget_Originalget_KeyOriginaloriginalReadDateLiteralTryConvertToPowerShellLiteralReadNullLiteralReadBooleanLiteralReadIntegerLiteralReadFloatLiteralget_TotalSequenceEqualAreEqualactualSystem.Collections.ObjectModelSystem.ComponentModelget_Levelset_Levelset_ConformanceLevelminLevelSeverityLeveltailAlgebraicUtilSerializationUtilCollectionUtilDictionaryUtilRemoveAllTrueForAllProvidesAllget_Callset_CallAddCallProbeCallCreateCallcallMicrosoft.SqlServer.Assessment.dllCmdShellPowerShellIsDBNullget_GroupingColumnNameCannotBeNullWriteNullCheckNullget_NotNullset_NotNullallowNullSystem.XmlCliXmlget_Eolset_EolIToolTToolXpRegXToolget_BaseToolIWmiToolPsWmiToolICmdShellToolXpCmdShellToolIPowerShellToolCmdPowerShellToolISqlToolsqlToolGetToolIRegistryTooltoolGetDataImplComposeMsSqlGetManifestResourceStreamGetDefaultConfigurationStreaminputStreamDivRemToStringElemObjElemMsElemObjsElemPropsElemTItemget_Itemset_ItemTagItemIsItem<>3__firstItemnewItemitemSystemSemaphoreSlimget_Trimset_TrimnmReadFromLoadFromIsAssignableFromLoadAssemblyFromget_TransformCheckInPlaceTransformtransformget_Platformset_PlatformplatformSumEnumresourceManBooleanTimeSpanJTokenget_ErrorJsonUnexpectedToken<>3__endTokenget_ErrorJsonWrongTokenJsonTokenget_Childrenchildrenget_Flattenset_FlattenWmiProbeTypeSignExternalProbeTypeSignCmdShellProbeTypeSignPowerShellProbeTypeSignSqlProbeTypeSignClrProbeTypeSignRegistryProbeTypeSignStringSubstitutionSignRegexSignComplementarySignMinget_Joinset_Joinget_Columnget_ValueColumnset_ValueColumnIndexColumnget_KeyColumnset_KeyColumncolumnUnionget_Versionset_Versionget_SchemaVersionset_SchemaVersionget_OriginVersionset_OriginVersionrulesetVersionComposeByVersionversionUnaryFuncExpressionReadNamedExpressionAndExpressionCompositeExpressionDecimalAssociativeExpressionMatchExpressionNullLiteralExpressionInExpressionColumnExpressionstrictComparisonExpressionOrExpressionGreaterExpressionEqualsExpressionLessExpressionIntersectExpressionNotExpressionArrayExpressionUnaryExpressionDecimalBinaryExpressionexpressionSpecificationspecificationget_ErrorJsonOperatorInstantiationTranslationInformationget_ErrorJsonUnsupportedOperationoperationMicrosoft.SqlServer.Management.Assessment.Configurationget_Configurationset_Configurationconfigurationget_Implementationset_ImplementationIProbeImplementationGetProbeImplementationget_ErrorCheckHasNoImplementationTryGetImplementationimplementationrepresentationSystem.GlobalizationCheckSpecializationSystem.Runtime.SerializationMemberSerializationMicrosoft.SqlServer.Management.Assessment.Configuration.CustomizationSystem.ReflectionTCollectionCharacteristicCollectionProbeCollectionRuleCollectionCaptureCollectionValueCollectionMatchCollectionGroupCollectionIDataParameterCollectionDbParameterCollectionemptyMeasurementCollectionKeyCollectioncollectionMicrosoft.SqlServer.Management.Assessment.Tools.ISqlTool.ConnectionMicrosoft.SqlServer.Management.Assessment.Tools.ISqlTool.get_Connectionset_ConnectionIDbConnectionconnectionsectionroundingFunctionget_EngineEditionset_EngineEditionSqlEngineEditionengineEditionop_Additionget_Conditionset_Conditionget_DefinitionCheckDefinitionget_ErrorTargetFilerInDefinitionget_FilterDefinitionfilterDefinitionget_LinePositionget_ErrorJsonLocationWithLinePositionlinePositionIOExceptionget_Exceptionset_ExceptionInvalidDataExceptionSqlAssessmentMissingDataExceptionDbExceptionFileLoadExceptionCreateAssemblyLoadExceptionNotImplementedExceptionNotSupportedExceptionBuildExceptionProbeNotFoundExceptionFileNotFoundExceptionKeyNotFoundExceptionSqlAssessmentProbeExceptionArgumentOutOfRangeExceptionHandleExceptionAggregateExceptionSqlAssessmentTypeMismatchExceptionArgumentNullExceptionCreateWrongTokenExceptionInvalidOperationExceptionSqlAssessmentEvaluationExceptionJsonSerializationExceptionSqlAssessmentJsonExceptionget_InnerExceptioninnerExceptionSqlAssessmentProbeParameterExceptionProbeRequirementsExceptionBadImageFormatExceptionSqlAssessmentFormatExceptionSetExceptionArgumentExceptionInvalidCastExceptionStackOverflowExceptionSqlAssessmentOverflowExceptionOutOfMemoryExceptionSqlAssessmentArityExceptionSecurityExceptionexceptionget_Descriptionset_Descriptionget_UnsupportedTargetCheckDescriptionSystem.Data.CommonMicrosoft.SqlServer.Management.Assessment.Configuration.JsonNewtonsoft.JsonReadJsonWriteJsonLoadRuleFactoryJsonPushRuleFactoryJsonReasonget_StringComparisonstringComparisoncomparisonMicrosoft.SqlServer.Management.Assessment.config.jsonRequirementsSingletonget_Urnset_Urnget_PatternStaticPatternReadPatternVariablePatternget_NamePatternget_ServerNamePatternserverNamePatternnamePatternExactStringPatternParsingPatternParamPatternSqlObjectLocatorPatternget_GetPatterngetPatternRegexPatternkeyPatternpatternRunCompareToIsSimilarToApplyToCopyToIJsonLineInfoHasLineInfolineInfoCultureInfotblInfoSerializationInfoserializationInfoMemberInfoget_TextInfoIndexInfoindexInfoinfoget_ReadsRatioreadsRatioget_Mapset_MapcapheapComposeMsOlapget_ReprepindexToSkipget_TimestampsubGroupFileGroupDataRowGroupAvailabilityGroupSystem.Xml.LinqSystem.LinqNewtonsoft.Json.LinqBitOrClearget_Charset_Charget_IsSingularvarget_LineNumberlineNumberget_Readerset_ReaderDbDataReaderCreateReaderStringReaderXmlReaderStreamReaderget_ErrorJsonReaderLinesReaderExecuteTextReaderJsonTextReadertextReader<>3__readerICharacteristicProviderRoleCharacteristicProviderFeatureCharacteristicProviderPermissionsCharacteristicProviderChannelPresenceProviderIFeatureProviderHadrProviderILogicsProviderServicesProviderSysConfigurationsProviderIFormatProviderTryGetProviderproviderAsyncTaskMethodBuilderRequirementsWarningBuilderStringBuilderCheckModificationBuilder<>t__builderRenderRemainderget_ResourceManagerget_ErrorEvalOtherotherSystem.CodeDom.Compilerget_SchedulerGetFlattenerXContainerToUpperget_Grouperset_GrouperSingleFieldGrouperMultipleFieldGrouperSingularGrouperIResultGrouperget_ResultGrouperset_ResultGrouperDefaultResultGrouperget_ComparerExpressionByReferenceComparerStringComparerProbeCallComparerGroupsComparerSqlLocatorAccessPointComparerIEqualityComparerget_StructuralEqualityComparerCallPriorityComparercomparerget_ParserparserIDataParameterIDbDataParameterDbParameterAddParameterSetCommandParameterget_ErrorEvalWrongProbeParametervalueNameParameterHasSameParameterCreateParameterkeyParameterparameterYieldAwaiterConfiguredTaskAwaiterGetAwaiterJsonWriterwriterget_TargetFilterset_TargetFilterAggregateFuncConverterProbeConverterProbeReferenceConverterAssessmentMessageConverterDataMorphConverterStringEnumConverterExpressionConverterCheckModificationConverterProbeCollectionConverterConditionConverterFlatMeasurementJsonConverterGrouperConverterRegexListConverterExtendedRegexConverterSqlProbeQueryPropertyConverterValueGetterComposeReportServerCreateJsonSerializer<>3__serializergrCallTransformPairpairBitXorget_MajorProbeErrorCheckErrorFatalErrorNoChecksErrorProbeRequirementsErrorIAssessmentErrorget_AccessorCheckEnabledAccessorCheckMessageAccessorCheckDisplayNameAccessorCheckHelpLinkAccessorCheckConditionAccessorCheckDescriptionAccessorCheckParameterAccessorCheckProbesAccessorCheckTagsAccessorCheckTargetAccessorCheckSeverityAccessoraccessorISqlObjectLocatorlocatorcreator<>3__aggregatorget_Separatorset_SeparatorNamespaceSeparatorDefaultSeparatorget_ListSeparatorPropertySeparatorIEnumeratorCharEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.Configuration.Range<T>>.GetEnumeratorSystem.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String,Microsoft.SqlServer.Management.Assessment.Probes.ProbeFamily>>.GetEnumeratorSystem.Collections.Generic.IEnumerable<System.Int32[]>.GetEnumeratorSystem.Collections.Generic.IEnumerable<System.String>.GetEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.Checks.Check>.GetEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.Checks.ICheck>.GetEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.Expressions.Expression>.GetEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.Data.Morphs.DataRowGroup>.GetEnumeratorSystem.Collections.Generic.IEnumerable<System.Data.Common.DbDataReader>.GetEnumeratorSystem.Collections.Generic.IEnumerable<TBasket>.GetEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.IAssessmentResult>.GetEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.Measurement>.GetEnumeratorSystem.Collections.Generic.IEnumerable<Microsoft.SqlServer.Management.Assessment.IDataRow>.GetEnumeratorSystem.Collections.IEnumerable.GetEnumeratorenumeratorMatchEvaluatorActivator.ctorget_FillFactorfillFactor.cctorget_Selectorset_SelectorCheckByIdSelectorReadSelectorCheckByTagSelectorCheckSelectorselectorconstructorstrictComparisonExprerrstrRefIdAttrNameAttrStreamAttrPassVariableAsIsget_ProbeNameAliasprobeNameAliasaliasMicrosoft.SqlServer.Management.Assessment.Logicsget_Logicsset_LogicsTwoPhaseLogicsMicrosoft.SqlServer.Management.Assessment.Probes.Characteristicsget_FailedCharacteristicsUpdateCharacteristicsget_KnownCharacteristicsCollectCharacteristicsSystem.DiagnosticsMicrosoft.SqlServer.Management.Assessment.Data.AggregateFuncsget_CheckIdscheckIds<>3__suspectIdsidsfieldsMicrosoft.SqlServer.Management.Assessment.Probesget_Probesprobesget_IndicesindicesSystem.Runtime.CompilerServicesGetServicesSystem.ResourcesMicrosoft.SqlServer.Management.Assessment.Properties.Resources.resourcesAggregateFuncCodesExpressionTypeCodesDataMorphCodesDebuggingModesget_RangesReadRangesget_CheckChangeschangesrangesMatchesget_MissingDependenciesset_MissingDependenciesGetMissingDependenciesGetDependenciesMicrosoft.SqlServer.Management.Assessment.Propertiesget_ErrorMultuallyExclusiveJsonPropertiesget_Rulesset_RulesFieldNamesvalueNamesGetGroupNamesgroupNamesGetNamesget_LinesExecuteLineslinesMicrosoft.SqlServer.Assessment.Typesget_Typesget_KeyColumnOrderedTypesget_ToolTypestoolTypestokenTypesKeyColsTypesget_CapturesOnPremisesDuplicatesget_KeyColsDataLengthBytesGetBytesget_ValuesconfirmedValuesGetValuesvaluesMicrosoft.SqlServer.Management.Assessment.Data.Morphs.IndexesProcessTableIndexes<>3__tableIndexesget_TagssuspectedTags<>3__checkIdsOrTagscheckNamesOrTags<>3__suspectTagsGetTagstagsXmlReaderSettingsJsonSerializerSettingsargsMicrosoft.SqlServer.Management.Assessment.Data.Morphsget_CallsAndMorphs<>4__thisOpeningInclusiveParenthesisClosingInclusiveParenthesisMicrosoft.SqlServer.Management.Assessment.Checksget_ChecksGetImplementedChecksbaseChecksGetChecksGetNewCheckschecksSystem.Threading.TasksEqualsIndexDetailsUtilsCollectCallscallsIncludedColsKeyColsMicrosoft.SqlServer.Management.Assessment.Toolsget_ItemsitemsContainsget_Columnsset_Columnsget_IncludedColumnsget_OrderedColumnsget_KeyColumns<>3__columnsExtensionsMicrosoft.SqlServer.Management.Assessment.ExpressionsSystem.Text.RegularExpressionsGetRecommendationsGetCombinationsGetPermutationsget_CheckSpecializationsSystem.Collectionscollectionsget_CheckDefinitionsget_OptionsRegexOptionsget_InnerProbeExceptionsget_InnerExceptionsinnerExceptionsoptionsStructuralComparisonsOverlapsget_Groupsget_CharsInitializeCharacteristicProvidersRuntimeHelpersComposersget_Parametersset_ParametersPopulateParametersparametersNewtonsoft.Json.Convertersset_ConvertersStandardConvertersGetConvertersTryGetNameValuePairsget_ErrorsGetProbeErrorsThrowOnErrorsget_SuccessExpresserrorObjectsGetSuspectsGetResultSetsMeetsget_Rulesetsget_CurrentRulesetsset_CurrentRulesetsget_HitshitsGetAssessmentResultsresultsDescendantsCodeSignConstantsElementsget_Requirementsset_RequirementsStaticRequirementsget_ErrorProbeRequirementsadvanceRequirementscheckRequirementsCollectRequirementsrequirementsGetEmptyMeasurementsGetNArgumentsGetFirstNArgumentsget_ArgumentsCheckUnexpectedArgumentsargumentsExistsFilterContextsGetContexts<>3__contextsget_WarningCheckSkipped3PlusdataRowsTransformRowsJoinRowsget_HasRowsget_TotalDaysget_KeysEnumKeysCollectKeysPrefixKeysRemoveAtElementAtConcatAppendFormatget_ErrorEvalStringFormatformatSubtractJObjectXObjectReadAggregateFuncObjectReadObjectPopulateObjectReadMorphObjectToObjectGetPropertyObjectobjectget_Subjectset_SubjectSelectIsSuspectIntersectdictget_Distinctset_DistinctGetTTargetget_Targetset_Targetget_StringTargetget_ErrorAccessTarget<>3__targetTBasketSystem.Collections.IEnumerator.ResetIRulesetAddRulesetGetRulesetget_DefaultRulesetset_DefaultRulesetdefaultRulesetDateTimeOffsetpathOffsetget_Leftget_IncludesLeftincludesLeftleftget_Rightget_IncludesRightincludesRightrightConfigureAwaitop_Implicitop_ExplicitSplitget_DefaultGetValueOrDefaultFirstOrDefaultTResultget_Resultset_ResultIAsyncResultget_LocalResultlocalResultFromResultcomparisonResultGetResultSetResultIAssessmentResultNextResult__resultToUpperInvariantComposeSqlAgentXElementget_ElementReadStartElementelementSingleFieldMeasurementTwoFieldMeasurementToMeasurementEnvironmentMicrosoft.SqlServer.AssessmentMicrosoft.SqlServer.Management.AssessmentXDocumentget_Documentget_ErrorJsonUnexpectedEndOfDocumentcliXmlDocumentComponentparentSystem.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<System.Collections.Generic.HashSet<System.String>,System.Collections.Generic.IReadOnlyList<Microsoft.SqlServer.Management.Assessment.ProbeRequirementsError>>>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Configuration.Range<T>>.CurrentSystem.Collections.Generic.IEnumerator<System.Int32[]>.CurrentSystem.Collections.Generic.IEnumerator<System.String>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Checks.Check>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Checks.ICheck>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Expressions.Expression>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Data.Morphs.DataRowGroup>.CurrentSystem.Collections.Generic.IEnumerator<System.Data.Common.DbDataReader>.CurrentSystem.Collections.Generic.IEnumerator<TBasket>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.IAssessmentResult>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Measurement>.CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.IDataRow>.CurrentSystem.Collections.IEnumerator.CurrentSystem.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<System.Collections.Generic.HashSet<System.String>,System.Collections.Generic.IReadOnlyList<Microsoft.SqlServer.Management.Assessment.ProbeRequirementsError>>>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Configuration.Range<T>>.get_CurrentSystem.Collections.Generic.IEnumerator<System.Int32[]>.get_CurrentSystem.Collections.Generic.IEnumerator<System.String>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Checks.Check>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Checks.ICheck>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Expressions.Expression>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Data.Morphs.DataRowGroup>.get_CurrentSystem.Collections.Generic.IEnumerator<System.Data.Common.DbDataReader>.get_CurrentSystem.Collections.Generic.IEnumerator<TBasket>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.IAssessmentResult>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.Measurement>.get_CurrentSystem.Collections.Generic.IEnumerator<Microsoft.SqlServer.Management.Assessment.IDataRow>.get_CurrentSystem.Collections.IEnumerator.get_Current<>2__currentSystem.Collections.ConcurrentIsPresentget_Countget_FieldCountactualArgumentsCountGetServiceAccountDotget_RootXpCmdShellScriptscriptStartInsertCanConvertJsonConvertSortCastrestIAssessmentRequestrequestIListget_SpecListToListSpecGroupListget_ErrorListGetAssessmentResultsListkeyListEmptyListlistget_DispatchPostFirst<>3__inputMoveNextSystem.TextParameterizedTextget_CommandTextset_CommandTextcommandTextget_BaseContextbaseContextStreamingContextstreamingContextget_CheckContextBuildCheckContextcheckContextPermutationContextIEvaluationContextget_EvaluationContextDerivedEvaluationContextbaseEvaluationContextAttributeEvaluationContextget_GlobalEvaluationContextget_SystemEvaluationContextevaluationContextcontextvIDataViewConstantDataViewCachedMorphingViewRowMorphingViewCliXmlViewLinesViewviewget_NowIDataRowCreateDataRowdataRowsourceRowget_BaseRowbaseRowExtValueRowMorphingRowCliXmlRowget_ErrorEvalOverflowrowMaxidxFindIndexFindLastIndexarrayIndexindexRegexinstancePrefixVariablePrefixprefixctxGroupByOrderByReadArrayInitializeArrayToArrayarrayTDependencyTKeyget_KeySqlPublicKeyToolKeyServicesKeyContainsKeyget_IsPrimaryKeyisPrimaryKeyQueryKeykeyget_AssemblyLoadAssemblyget_ErrorLoadingAssemblyGetExecutingAssemblyProbeFamilyget_IsReadOnlyMultiplyApplyIndexOfAnySelectManyCopyParseBoundaryTDictionaryToDictionarydictionaryget_Queryset_QuerycharacteristicQuerySingleValueInstanceQueryEnumKeysInstanceQuerySingleValueQueryEnumKeysQueryqueryLoadRuleFactoryPushRuleFactoryFormattableStringFactoryfactoryIInventoryget_InventoryInitializeInventoryinventoryget_Registrycapacityop_Equalityop_InequalityexpectedArityget_ErrorEvalArityget_Severityseverityget_PrioritySystem.Securityget_EmptyIsNullOrEmptyget_IsEmptyget_ErrorJsonMissingPropertyget_ErrorMissingJsonProperty.::, {0:S\{(?<key>(\w|\.|::)+)(:(?<format>.*?))?\}check: . 
system
global
target!checkNamesOrTags
checksfactorykMicrosoft.SqlServer.Management.Assessment.config.json__NoChecks#Microsoft Rulesetchannellocator	attr 
<null>}Microsoft.SqlServer.Management.Assessment.Properties.ResourcesErrorEmtyString-ErrorCheckTargetChange'ErrorInvalidCheckIdErrorEvalArity)ErrorEvalMissingData#ErrorEvalOverflow+ErrorEvalStringFormat+ErrorEvalTypeMismatch)ErrorIndexOutOfRange1ErrorJsonMissingProperty=ErrorJsonOperatorInstantiationErrorJsonReaderEErrorJsonSerializationNotSupported?ErrorJsonSingularRangeInclusiveAErrorJsonUnexpectedEndOfDocument1ErrorJsonUnexpectedToken;ErrorJsonUnsupportedOperation'ErrorJsonWrongToken'ErrorJsonWrongValue9ErrorValueEndsWithWhiteSpace;ErrorValueIsAWhiteSpaceString3ErrorValueIsAnEmptyString=ErrorValueStartsWithWhiteSpace9ErrorEvalWrongProbeParameter7ErrorStringOrObjectExpected=ErrorConverterCannotWriteValueCErrorConverterCannotReadJSONValue7ErrorVersionFieldIsRequired1ErrorNameFieldIsRequired!ErrorKeyNotFound=ErrorImplementationWasNotFoundGErrorJsonSingularLeftRangeInclusiveIErrorJsonSingularRightRangeInclusive-ErrorRecursionDetectedEErrorValueCannotBeNullOrWhiteSpaceKErrorMultuallyExclusiveJsonProperties1ErrorMissingJsonProperty9ErrorTargetFilerInDefinition?ErrorUnrecognizedChecksItemTypeOError_CheckModificationSelectorResuiredErrorEvalOther;UnsupportedTargetCheckMessageCUnsupportedTargetCheckDescriptionCUnsupportedTargetCheckDisplayName5ErrorFailedObtainProbeData;ErrorCheckHasNoImplementation#ErrorAccessTargetStringCheckIdStringTarget=ErrorConditionEvaluationFailedCErrorJsonLocationWithLinePosition)ErrorProbeInitialize)ErrorLoadingAssemblyUNotEnoughPermissionsToRunAssessmentMessage-ErrorProbeRequirements=GroupingColumnNameCannotBeNullKUnsupported_PowerShell_parameter_type)WarningCheckSkipped1)WarningCheckSkipped2)WarningCheckSkipped31WarningCheckSkipped3Plusvalue	data
source
columnimplementation	path_http://schemas.microsoft.com/powershell/2004/04ToStringPropsMSObj	ObjsSNRefIdRefNilBCDTTSGBAURIVersionXDSBKSSBySBU16I16U32I32U64I64SgDbDprogresstoolTypekeySQLCmdShellPowerShellWMIRegistrylinesAobject permission on xp_cmdshellEXECUTE#sys.configurationxp_cmdshell?.InvocationInfo.PositionMessage	    $=;
$({0})��powershell -NoLogo -NoProfile -ExecutionPolicy RemoteSigned -OutputFormat Xml -EncodedCommand 
$false$trueeGet-WmiObject -computername 'localhost' -query {0}?object permission on xp_regreadGobject permission on xp_regenumkeysQobject permission on xp_instance_regreadYobject permission on xp_instance_regenumkeys(?<!@)@{(.*)}commandTargetName@ProductVersion%ServerMajorVersion services installedMSSQLServerMSSQLSQLServerAgentSQLAgent$-MSSQLServerOLAPServiceMSOLAP$5SQLServerReportingServices{0}{1}0^service$SQLAgent
MSOLAPReportServerMsDtsServerMSSQLFDLauncherSQLBrowser	name= in sys.configurations set to = in sys.configurations enabledI^sys.configuration(\s+(?<name>.+))?$access to ^channel$	HADR enabled^feature$class
OBJECT permission	 on W^(?<class>.+) permission( on (?<name>.+))?$ role
^role$indexmorphVALUETableNameIndexNameis_primary_keyIndexTypefill_factoris_disabledis_unique	HitsReads_Ratio#filter_definitionColumnName%is_included_columnkey_ordinalColTypeNameColTypeSizeids	tagsoriginalarguments	itemprobeIdaliasgetPatternarraynewItem	rest{}changesparameterNameaccessortransformitemTypeDEFINITIONOVERRIDE5targetFilter, targetFilterCheckRuleidtargetFilterdisplayNamedescriptionmessagehelpLinklevel
probesconditionenabled!string, string[]GrouperQueryPropertyProbeIAggregateFunc	type#ParameterizedTextConditionExpressionIPatternnotProbeCollectionCLRExternalprobe typeassemblyStringassemblyProbeReference
paramsIDataMorphRangeleftBracketrightBracket	leftcommaright��^\s*(?<leftBracket>[([])?\s*(?<left>[^,)\] ]+)?\s*(?<comma>,)?\s*(?<right>[^,)\] ]+)?\s*(?<rightBracket>[)\]])?\s*$	 or 	lessgreaterequalltgteqieqiniinorandaddsubmuldivmod
bitandbitor
bitxorgreaterequallessequalnotequalgeleneineintersectceilingmatch
imatchaggregate
renameindexDefinition!redundantIndexes!duplicateIndexes
dbInfo
noDatanameValuePairsparsetoString	joincountminmax
formatrequestprocedure;EXEC master..xp_cmdshell @cmd	@cmd#< CLIXMLErrorOEXEC xp_regread @hive, @key, @valueNameaEXEC xp_instance_regread @hive, @key, @valueName@hive	@key@valueName\*%HKEY_LOCAL_MACHINEASYSTEM\CurrentControlSet\ControlCurrentUserEEXEC xp_regenumkeys @hive, @parentWEXEC xp_instance_regenumkeys @hive, @parent@parentRegistryKeyName
stdoutrunSpaceserviceaccountCSYSTEM\CurrentControlSet\ServicesESYSTEM\CurrentControlSet\Services\ObjectNamekSELECT [name], [value_in_use] FROM sys.configurations��SELECT [value_in_use] FROM sys.configurations WHERE [name] = @name@nameOSELECT SERVERPROPERTY ('IsHadrEnabled')��SELECT [permission_name] FROM [sys].[fn_my_permissions](@securableName, @securableClass)@securableClass@securableNameDATABASE_SELECT ISNULL(IS_SRVROLEMEMBER('@roleName'), 0)@roleName{0}:{1})LastKnownDBCCDaysAgo+dbi_dbccLastKnownGoodUpdSysCatalog#dbi_updSysCatalogCreateVersion#dbi_createVersionDBCCFlagsdbi_dbccFlagsField7Do not use the same field ']' for grouping and aggregating simultaneously.TableIndexes,ToDeleteIsPrimaryKeyIsUnique	TypeKeyColumnsIncludedColumnsKeyColumnTypesFullNameKeySizeFillFactorIsDisabledReadsRatio!FilterDefinition��SELECT count(*) FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name = 'VIEW SERVER STATE'��SELECT count(*) FROM fn_my_permissions(NULL, 'DATABASE') WHERE permission_name = 'VIEW DATABASE STATE'RangeList���Eb�XI�E�Y��      M m  U m imU\	����
U��mpUpU����Y0m����Y0��\�$ �m��U��������x  �����������������mU������$������8���8Y��U�������h�x�h���h�������������\�������xm��U��
��x����������m��U��m����m�pU�p���������U��� �Am��U������������U���� 
U����U��	���������� ��x�����@���	�@��	�@���L�����$�@���$���(�@��}���@����
�@���@����x�D���P���T����X������}������������t���,��D������$m�$U�$����������������������������m��U��	��YY] tm����
U��
m��	��  
��	 ��}U
}	 ���� 
��	����	 U }��	��
}������	�� ����� 
 � ����	������ m��}80��}}py��Uy
�� ��
 U �e �e �e   ����������< ������ ��������< 	Y0����Y0��0�}Y0	��
��	������}0��}0
}��}0
}}0����
 ��@	�� �� ���$ �� �� �� �� ��qUq
yUUy
	U��  �� ��}H}�� 	����H��� 	����
 �
���� ���	�� }���$	���$ ��m����U��m��M��
y���l	U���U��y��UUy
������ ������ ������0�Q
������	�0
�	 �����m ����}p
���������������U
����������������
��������������Up
�
`������
 �������� �� ���$	��@�$\@�$
��	��
 �������� ����������9
� �5��� y��	
��m�=�= �y��Uy
�=�� y����y������"��Uyy
������	���� UU��m��������
U����
m����	����������}����yM
M	�0�0����y������	
�0
��x�M ��	 �Q�U�=q�]���aMM	M��
U M
���4
�e�i �i  � ��  ��	
 	����y �m �m �}p��P}���	���$ �����$���$�$	���$	���$&�=�=m���$���$y���$��Uy��
���$
U���$
m���$
������������
y����y�<y�$
�$y�$UUUyU
�$UU
�$m�$�$�=�=UUUUUU
 U�$��
 �}�$�D���$�$�=�=���$mm�$
  
]������ �8���8�8���8���Pq�8�T	�8
 �8
 �8y��
��U] �����\ �������\���`�� �� U����y��Uy
��	�d�� ����
�����\��	��������m�����\	 U��U��m�� ��
y����
����	U
��UyU  M M	 M�h���� ����������My���l �-m �m�m ���h
�}
�h�l��|
�l �����t���
�t	}��}�������������� ����m����U��m��
 �����1  �5�x�}��
�x�|���
�|���
����
����
����
����
��y��
��
��}������
����
������ y��M	����������	���	
��
M��
����
��
��m������ �9 �� ����	���
����
��y����x y�� ������#���������������������������� ����  �E ����
��m����U��m������������������
�������� �)y��Uy
�� ����������!����������	 U��m����U��m����,}�������������� ����
�������
�����
���M�M ����������������	����
����
���
����	 ��M�l�
��
������	�����
����e�
�
 ��
U����U��UUUU������
��������y��

��U$
���pm�����p���py��
�p
���p}������������m�����8���8 �� �Xy��U��
����	U��2	��m�����}��������
��}��
�}�� �
�}��
 ������}�������<]���
�]���y��}��}�
��}��}�
}�
��y��H
��H0�d��}����}��������m
��}��
��}��}������UU}�	���,}��y��
�������	 �����]���a)�����xm�������x�x�����x	���x

}�|y�����xU��
�����x��y��U�)Uy
��y�)��
�)��U�)��y��
y����&U�)Uyy	
����y�)��U��
�)������
��}pmLLmttpULmLUtmt
m����y��
��U��m����UUy��
��
y|
|��
����y��
��	y��L
��L
LL#m�$�$�������-�$�$	 ������	�)�$ �-	�-�$m����������H�������$���$��
����
������Mm�����MM��MU��m���M��}��}��	����
 }��
 ��y��	
��
 ��m��}��}��}�m������������
�����������m�������
�U�m����5y�D��U
�D��	U��m����U��m������	 �� U��	������	��������������y�������������� y
]������������ ]����������������
��	����}�I��	��}�I��y�����I�����I��	�� �I��y�I��
�I���I�� �I�� 	��y�I��
�� �I��y�I��
�I�� my�I��
�I����	��$���I���I�����I����	����I����	�� y��
y���I
�����I��	��	������m����	����
����y����	��
 ����}����}��
 }��	 �
�������	��y��	
�� ���������M�M �Y�X��x�P����x�X��x�P����x �@�}�D�������D���D��
���D���D��.���D���D�����D���D��	�P
�@� �@	 �	�@� �P	�T
�H�L
m �H	�H
 Um	 �L�L �T�Xq
 �X}�Y�l���1��}���] �]	
}��
��


���p
��	�X�X
�P�����X��x	
��	
}��
�
�]�]
�a�,���a�,�a�,	�e�,�e�Q �Q �QD�$�$�]
�$�$
���8��� yU�$�$}�$��yU�$�$yU�$�$�e�i���Q��	
���� �� �i �QM����
 ���� �IM �U�� MMM	����
�e�i	 �e�i ��U�i
��
��
��
��
���m�q�u�m�m���u���q�i�mM�� M�i�mM��M�i�e���$���]
���$
�a�����a���a��	�e����
�����$���]��
 ���Q����	 �$�$  �U��U���Q�� U���(�Q������ �q �� �
 ���Y�����i �i�i �i
��U
�]���$������
 �$�����l}��}����	��]U]
Y��	��
YYY	��
����	��}]
��yY	 YyY	
Y	y y

}����	] ]UU]

��8����Y0��<��<y0
0��<	 �����
�	������	 �
0
�
� � � �
�� ��
���������;X}p�}������Up�%Up�!Up��}��	y��p
��p
py����Up
Up��Up
 �!�!Up	 �%�%Up
�%Up�N
XUp���%���!���)����}p�%}p�!}p��p�������!���%��
�%���
y����
����U�)����m�)�����)������}p�!}p�%}p
�%}p������%���!�����������!���%��
�%����,�,!	�����%�!���0
yx�M �Mx	yx�M�M��
��0y�������!�%�%
�%�0��L	�T m�X1��}�i���%���!���%�!��
 ���������!���%��
�%���h  �����!�%
�%�h*���|}}�%}�!}��
��}
�!}
�%}
�%}�l5
����}}�%}�!}��������
�%}�t������ �� ���� ��	����$��}���������}��
��x���������� 
��|)���i�i�����%���!������
�%����;�����%���!���%�!������
�%����
�%��
���1]������U������}}��
���
��]������
����y��	
��y����(
���%���!���%�!��
�%����
�%��*����}}�%}�!}��
�%}��x����]������U����}Y}��}���%}���!}��������}����}����}��}��}��}��}���!}���%}��
�%}����y����
����
 U�� ��(	�������%���!������ ��������	�%��
�%����"���������%���!����
 ��
 ����
�%����#�������%���!����}��	����	�!��	�%��
�%���� #���������%���!����
�%����y��U��
������"���������%���!����
�%�������5 ��}������y������
������
��}��
 ��
�������������
�������B
�������%���!�������%�!��
�\�����!���%��
�%����
 ���!�%
�%��2�������%���!���������!���%��
�%���� U��>}��}���%}���!}����
�%}����-
�x���%���!���%�!��
�x
�%����
�%���x�i�%�!�� �����!�%
�%��k���M�l������y���������%�!������������}����	���ly����
���������
�%��������x�%�!��
�%�c���������������������%�!������������
�%�0�x�i�i���%���!���%�!�� �}
�%���
�%��x�%�!��
�%������ �P�0�T�����
�� ��� 
�4�8�@y��U�
���	
��D�! �!
��y��U�
����H]����]����y}��
}��y}��
}��
���y���L ��
�%y�%��
�%��	
��}��	���,�h�p���,�TU	���,y��
���X�|U�`��U��
��UU���d�)���h��
U�)��
m�)��y��
��	�)���py�|
�|y�|
�|y�|
�|y�|	���x�����x��y���x��
���x����}����y�)��U
�)��}����A��}pH���%�!`��LL����LL���
�%��}L��L
����x���%�!�� ��
�%�����������������������
�������U��m�� }��m����������}��
����P���X�
�P���X��
����U��m����
����y�
]�����
�����
����U����%
������U��������
������d����$���$��<���]����

��	��	�(
 m����������������<� �{��-�Q��]̀�̑0�O沦�퀠$��$RSA1''6�n_�����1�:�fl/��y�����2}/��R4H�<=\]��Ǽ��(k,Q�\�$+�Au2����I���RmRo����{���l�؂O���1
�ˢ�#V{-��P���b�왹J�|};(��Ȃ�0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8attr::.#intersect@Outputprogress
ErrorSQLCmdShellPowerShellWMIRegistry:EXEC master..xp_cmdshell @cmd��powershell -NoLogo -NoProfile -ExecutionPolicy RemoteSigned -OutputFormat Xml -EncodedCommand $({0})dGet-WmiObject -computername 'localhost' -query {0}NEXEC xp_regread @hive, @key, @valueName`EXEC xp_instance_regread @hive, @key, @valueNameDEXEC xp_regenumkeys @hive, @parentVEXEC xp_instance_regenumkeys @hive, @parentstdoutTargetNameservice$HKEY_LOCAL_MACHINEBSYSTEM\CurrentControlSet\ServicesnamechannelHADR
classrole,  @��versionplatformtypeengineEditionserverNametargetdisplayNamedescriptionmessagehelpLink
levelprobesconditionenabledtagsidtargetFilteritemTypeDEFINITIONOVERRIDE/notimplementationassemblyCLRExternalparams
aliastransform[]leftBracketrightBracketleft
right
commaTableNameIndexNameKeyColumnsIncludedColumns FilterDefinitionIsPrimaryKeyIsUniqueTypeKeyColumnTypesFullNameKeySizeIsDisabledFillFactorHitsReadsRatio������Y	��<}��}}0D}����	����t�t��\xL���������1��
���������p}����x�M�������y�}}�������x
���$��
���$����y����U�$}�$�$]�������e�(�D���������\���� M��My���lmm��}������}��M������������
��������������������}���}��
���,�t}��U����(��	����	����	�����������������}��
����	������������ 
}�D���,�0�4�8�<�Y��yU�$�$���a�����a�,�0��]Y��	y����y0p8	��<	��<m����Y0����Y0<��y��	����
U��	����m���}pX}p�%Up�y�����Up	�%��m�)�����%}p�9�$y�(y����y�������8y���$�@
y�$U�H��0�}���m��	�%���%	��|�%}�py	y�����}����}���i��
������
y��U��}}��������y�������\����}����}��}�%}�������x}��
�%��
�������y����x����}��	������y�����%����%���
�%����%y�����������}����
���l�
����
����
������ m���y� �$
y���(�,	y���P�T��}���@���Py}��
���,�hm�p�\	y��	����|�p���l	y��	y��
�)��m�)����}�|�����x��y�����xU����y�)��	y��y������y�)��U}L��	y��	y��	y��}	����	����m��	�D����m����U��m����y�������	y�����d���]m�$�$�,�4	y�|	y�|	y�|	y�|�8� 
UYUYY] �� x	 U�� \������������ ��}p ���� ��U������ ��
 ��Y �� �� �� Y 0
 ��< Up��������Y0
���� }�� }}0 ��0 m����Y0D tt�� t��	 }�� ��	 ���� �$ ������
 ���� t	 @�$ �t �� �� ��}px ��}px�� ��}pxU ��}pxU�� U��x
 U��x �� �� �� ��	 ����	 ����	 ����	 ���� ����xU��U����������x ��Up��
����p �� t�� x
 x�� �� �� �� L L  �� ��	 �� �� �� �5�� x������	 ���� ��
���� ������������ ������ �p	 }�� x���p��\0 �lM ��	 UM ����UM ��x�M0����y���� �� �� xx x �� �� �� �� M	 M�� M�� MM MM�� tx�� xM�e
�i�m�4�4�y�}	 }�� �� �� � �	 ��x
 ��x ���$ D D �� �� pxt ���$�� ���$ �� �� �� �$ ��
 ��U�$
 ���$  �
 y���� y����U�$  U	 U�$ t U ��	 }�$ �
U	m
m � �$ �$ � ]������ ]������U�$ �e �e
 �eU�$
 �e�$�$�$���$�$���$�(	 �$�$ �$�D������
��
������
�����\���d �� ��	 m�� �� ������ ��}��Y ���������`MMMM0��
 �l��M ��My���l My���l �m �� U m m�l��
 ��} ���| ���� ����������}������������ �5�� �5U}���m�i�i�5�m�i}}�� ����������	 }��	 U �� ���������� ����} ����} �������\��YY�� UM �������� ���������� �� ��  �������x��	 U�� �mx�� U������ �����mU���� �� �5������ �������� ����
 ������ �� ���� �5���� ��������	�����5��}�� ������ ������ 
 ����U��	����	 �������\���\�������5�����5����	���� ���� ��	 ���	 U�� U����	 ��	 ���	 ��� ����
 ���� ��	 �� U�p��	 �� ����	�� �� U��U�� U���� ��}�� ��}�� ��U�� �d ���, �t �t	 }��
 U��
 ��U�� �� U���)��	��U�)���)�� ��}p���� ( (��}pUL
L}p
UtL����
}L	L��L	����	�$��Up��}LH��L
����L����L�5���������5��U���� x���� U��xU����������
 U�
 ����
 ����
 ���	 m� � � � �� �� ���x�5�����
U�$U�D��x������ U��U�� U��x���� U��U��x ����	 �� �������� �� �� } } �� �� U��xU ��x �� x ��  	 U
 U    ��
 ���� �� ��
 x�� �� ���� ���� ���� �� �� �� m����	 m�� �� ���� �� ��# ��������������
 ���� �� x �� �Q �� ���U�D�� ��U�D��	 ���� �� ��U�D�� � � ��x�	 ��� ���� �� ���� ���  U�D�� }�D�� �$	 ���$ �$�� �(�,
 ��}�� }�����0	 ���� �����4�8 �� ���<
 ����x ��x�� �H�L �U���� ���QM����
���Y �U}���� }���QM}���� �Q � �� �U��� ��QM����P���Q���@��&�P����x�Q���@����x�D���Q����Q�� �U�t�� �t�QM�t�� �QM��
 �U�� �U�,�� �,�QM�,��	�,�Q�,�Q�� D�QMD�� �UD�� �U��� ��QM��� �U�$�� �$�QM�$��U�$�$�Q���]U�$�Q���]�$�Q��U�$�Q�� �U���� ���QM�������Q�� ���QM���� �U���� �U���� ���QM�������Q��	�m�Q���e�Q�����e�Q���e�Q�� �U���� ���QM���� �U���� ���QM�������Q��	���Q �U���� ���QM���� �U���� ���QM����
 �����Q��
������
���Q�����������Q�����������Q�����i�e���Q�i�Q���i�Q����
�Q�]���Q�]�Q	�Q
�Q	  m �� 0 p mp ����Y0 ��  �� �� ��	 m�� p�� ����
 ��  ���� ������ ���$
 U�$
 �� ������ �� �� ����
 �� ���� ��	 m�� ��x�� ������	 ����	 ��	 m�� ����
 ���(   �H� }���}�� U��� U��� }�� ���% }�� �� �� �p	 m�p �� �� 
����  ��	 }�| 
 ��   �����x U�������x �� �)�� ���� U�)�� �� �� | L�� � ������ ������	 m��	 m�$
 ����	 ��	 �� �$U�$ �, �| �| �| �|(��(x	(U��(\((��(��(��(Y
(��<(}��(}}0	(��((	(}��(��
(����(t	(@�$(�t(��(��
(��(��(��(��(��(L((��(��	(��(����(����(�p	(}��(��x�M�y�}	(}��(��(�	(��x(���$(D(��(���$(��(��	��	(U�$	(}�$(�$(�e�((�D
�����\(��(��(��((��My���l(��(m(m	(}��(����}(UM(��(M((��
(��������(����(����(��	(��	(��(��(��}��(���,(�t	(}��((��
(}��
(����
(����
(���(��(��	(��(��������(��(}(��(y��(((��
(����(��
(}��
(����(��(������ (}�D���,�0�4�8�<(�@	(�(�H	(�L(�Q	(�$(p(����Y0(��(���((�p((��	(}�|(U(
(	(��TWrapNonExceptionThrows
1.0.31.0$Microsoft SQL Assessment EngineReleaseMicrosoft CorporationMicrosoft SQL Server$Microsoft. All rights reserved.MHMicrosoft SQL Server is a registered trademark of Microsoft Corporation.�z�tMicrosoft.SqlServer.AssessmentTests.Core, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8�x�rMicrosoft.SqlServer.AssessmentTests.Fx, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8�y�sMicrosoft.SqlServer.AssessmentTests.Fx2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8����Microsoft.SqlServer.Assessment.IntegrationTests.Core, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8���~Microsoft.SqlServer.Assessment.IntegrationTests.Fx, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8�c�]SqlAssessmentTest, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8�l�fSqlAssessmentConnectedTest, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8
en-US6.NETStandard,Version=v2.0TFrameworkDisplayNameRMMicrosoft.SqlServer.Management.Assessment.AlgebraicUtil+<GetPermutations>d__0TOMicrosoft.SqlServer.Management.Assessment.AlgebraicUtil+<GetCombinations>d__1`2YTMicrosoft.SqlServer.Management.Assessment.RequirementsWarningBuilder+<ToWarning>d__4PKMicrosoft.SqlServer.Management.Assessment.SpecGroupList+<GetEnumerator>d__7UPMicrosoft.SqlServer.Management.Assessment.Engine+<GetOpenedConnectionAsync>d__33QLMicrosoft.SqlServer.Management.Assessment.Engine+<GetImplementedChecks>d__34YTMicrosoft.SqlServer.Management.Assessment.Engine+<GetAssessmentResultsListCore>d__36PKMicrosoft.SqlServer.Management.Assessment.Engine+<ProcessRequestAsync>d__39FAMicrosoft.SqlServer.Management.Assessment.ProbeCall+<Invoke>d__24D?Microsoft.SqlServer.Management.Assessment.Scheduler+<Run>d__3`1ZUMicrosoft.SqlServer.Management.Assessment.Expressions.ColumnExpression+<GetNames>d__5SNMicrosoft.SqlServer.Management.Assessment.Expressions.Literal`1+<GetNames>d__5_ZMicrosoft.SqlServer.Management.Assessment.Expressions.NullLiteralExpression+<GetNames>d__7VQMicrosoft.SqlServer.Management.Assessment.Tools.XpCmdShellTool+<ExecuteLines>d__3[VMicrosoft.SqlServer.Management.Assessment.Tools.XpCmdShellTool+<ExecuteTextReader>d__4TOMicrosoft.SqlServer.Management.Assessment.Tools.CmdPowerShellTool+<Execute>d__4MHMicrosoft.SqlServer.Management.Assessment.Tools.XpRegXTool+<Execute>d__7NIMicrosoft.SqlServer.Management.Assessment.Tools.XpRegXTool+<EnumKeys>d__8YTMicrosoft.SqlServer.Management.Assessment.Tools.XpRegXTool+<IsChannelAvailable>d__10RMMicrosoft.SqlServer.Management.Assessment.Tools.XpRegXTool+<CollectKeys>d__11OJMicrosoft.SqlServer.Management.Assessment.Tools.XpRegXTool+<QueryKey>d__12PKMicrosoft.SqlServer.Management.Assessment.Tools.XpRegXTool+<QueryName>d__13UPMicrosoft.SqlServer.Management.Assessment.Probes.CmdShellProbe+<GetDataImpl>d__5UPMicrosoft.SqlServer.Management.Assessment.Probes.RegistryProbe+<GetDataImpl>d__8YTMicrosoft.SqlServer.Management.Assessment.Probes.SingleToolProbe`1+<GetDataImpl>d__3WRMicrosoft.SqlServer.Management.Assessment.Probes.ExternalProbe+<GetDataAsync>d__28PKMicrosoft.SqlServer.Management.Assessment.Probes.DbaProbe+<GetDataImpl>d__9[VMicrosoft.SqlServer.Management.Assessment.Probes.DbaProbe+<ReadMeasurementsAsync>d__14SNMicrosoft.SqlServer.Management.Assessment.Probes.DbaProbe+<GetResultSets>d__15OJMicrosoft.SqlServer.Management.Assessment.Probes.Probe+<GetDataAsync>d__22_ZMicrosoft.SqlServer.Management.Assessment.Probes.CharacteristicProviderSource+<Update>d__7a\Microsoft.SqlServer.Management.Assessment.Probes.CharacteristicProviderSource+<GetData>d__11LGMicrosoft.SqlServer.Management.Assessment.Probes.SqlProbe+<GetData>d__0snMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.ServicesProvider+<UpdateCharacteristics>d__11idMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.ServicesProvider+<GetServices>d__14ojMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.ServicesProvider+<GetServiceAccount>d__15toMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.SysConfigurationsProvider+<UpdatePresence>d__7qlMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.SysConfigurationsProvider+<UpdateNamed>d__9ytMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.ChannelPresenceProvider+<UpdateCharacteristics>d__6b]Microsoft.SqlServer.Management.Assessment.Probes.Characteristics.HadrProvider+<IsPresent>d__1zMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.FeatureCharacteristicProvider+<UpdateCharacteristics>d__9��~Microsoft.SqlServer.Management.Assessment.Probes.Characteristics.PermissionsCharacteristicProvider+<UpdateCharacteristics>d__8|wMicrosoft.SqlServer.Management.Assessment.Probes.Characteristics.RoleCharacteristicProvider+<UpdateCharacteristics>d__7XSMicrosoft.SqlServer.Management.Assessment.Data.ConstantDataView+<GetEnumerator>d__9WRMicrosoft.SqlServer.Management.Assessment.Data.RowMorphingView+<GetEnumerator>d__7_ZMicrosoft.SqlServer.Management.Assessment.Data.Morphs.NameValuePairsMorph+<Transform>d__11VQMicrosoft.SqlServer.Management.Assessment.Data.Morphs.DbInfoMorph+<Transform>d__1^YMicrosoft.SqlServer.Management.Assessment.Data.Morphs.AggregateProbeMorph+<Transform>d__7]XMicrosoft.SqlServer.Management.Assessment.Data.Morphs.SingleFieldGrouper+<Transform>d__5rmMicrosoft.SqlServer.Management.Assessment.Data.Morphs.Indexes.DuplicateIndexesMorph+<ProcessTableIndexes>d__0rmMicrosoft.SqlServer.Management.Assessment.Data.Morphs.Indexes.RedundantIndexesMorph+<ProcessTableIndexes>d__0`[Microsoft.SqlServer.Management.Assessment.Logics.TwoPhaseLogics+<GetAssessmentResults>d__11QLMicrosoft.SqlServer.Management.Assessment.Logics.TwoPhaseLogics+<Touch>d__15ZUMicrosoft.SqlServer.Management.Assessment.Logics.TwoPhaseLogics+<FilterContexts>d__21SNMicrosoft.SqlServer.Management.Assessment.Logics.TwoPhaseLogics+<GetData>d__25b]Microsoft.SqlServer.Management.Assessment.Logics.TwoPhaseLogics+<CollectCharacteristics>d__26SNMicrosoft.SqlServer.Management.Assessment.Configuration.Ruleset+<GetTags>d__24XSMicrosoft.SqlServer.Management.Assessment.Configuration.Ruleset+<GetNewChecks>d__27VQMicrosoft.SqlServer.Management.Assessment.Configuration.Ruleset+<Specialize>d__28^YMicrosoft.SqlServer.Management.Assessment.Configuration.EngineConfig+<GetChecksCore>d__26^YMicrosoft.SqlServer.Management.Assessment.Configuration.EngineConfig+<GetChecksCore>d__27b]Microsoft.SqlServer.Management.Assessment.Configuration.Customization.CheckChange+<Apply>d__1faMicrosoft.SqlServer.Management.Assessment.Configuration.Json.FlattenDataMorph+<TransformRows>d__5hcMicrosoft.SqlServer.Management.Assessment.Configuration.Json.ExpressionConverter+<ReadSequence>d__4hcMicrosoft.SqlServer.Management.Assessment.Configuration.Json.ExpressionConverter+<ReadSequence>d__5idMicrosoft.SqlServer.Management.Assessment.Configuration.Json.ExpressionConverter+<ReadSequence>d__12gbMicrosoft.SqlServer.Management.Assessment.Configuration.Json.RangeListConverter`1+<ReadRanges>d__2����Microsoft.SqlServer.Management.Assessment.Configuration.Json.ExpressionConverter+<>c__DisplayClass15_0+<<ReadNamedExpression>g__ReadOperands|0>dError {Message}Note for {Check.Id}����Newtonsoft.Json.Converters.StringEnumConverter, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedTarget unsupported warningA3System.Resources.Tools.StronglyTypedResourceBuilder15.0.0.0
Check {Id}	Item{ToDebugString()}{Name}{Version}=8{Provider.GetDisplayName(Key, Arguments, Specification)}	transformcommand
query`[Microsoft.SqlServer.Management.Assessment.Configuration.Json.SqlProbeQueryPropertyConverter��useDatabaseTUyNewtonsoft.Json.DefaultValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedDefaultValueHandlingrunFor
requires��distinctTUyNewtonsoft.Json.DefaultValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedDefaultValueHandling��notNullTUyNewtonsoft.Json.DefaultValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedDefaultValueHandling��trimTUyNewtonsoft.Json.DefaultValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedDefaultValueHandling��	separatorTUvNewtonsoft.Json.NullValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedNullValueHandling
group��nameTUmNewtonsoft.Json.Required, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedRequired��versionTUmNewtonsoft.Json.Required, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedRequired��
schemaVersionTUmNewtonsoft.Json.Required, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedRequired��TUuNewtonsoft.Json.TypeNameHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedTypeNameHandling
rules��TUmNewtonsoft.Json.Required, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedRequiredversion
platform	type	name�3
serverNameTUvNewtonsoft.Json.NullValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedNullValueHandlingTUyNewtonsoft.Json.DefaultValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedDefaultValueHandling��
engineEditionTUmNewtonsoft.Json.Required, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedRequiredTUvNewtonsoft.Json.NullValueHandling, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeedNullValueHandlingTPItemConverterType��Newtonsoft.Json.Converters.StringEnumConverter, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed�����lSystem.Resources.ResourceReader, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet>PADPADP?����$
������č-
�_�۫���;�;�J��3��yd�^�����ЊN��OHٔC�ܧ��hJ'�jJ'�kJ'�
�ହ������8���沭���x���ݤ�#��>J��y4R��G����[0d��kE�TI������Wf@��!��a$	i�/���8w�A=F E���NA�P�1+Qy�S��T}KT���T�V�Z��f[�@a�
�o�6w��7|
m�}���~����
�	�C���A	 S��"�H

`��
p�I
�'�)f�U��	Kj">

�<�S�=���	�u
�
q��N"ErrorAccessTarget:ErrorCheckHasNoImplementationLErrorCheckModificationSelectorResuired:,ErrorCheckTargetChange�<ErrorConditionEvaluationFailed�BErrorConverterCannotReadJSONValue�<ErrorConverterCannotWriteValueErrorEmtyString[ErrorEvalArityy(ErrorEvalMissingData�ErrorEvalOther�"ErrorEvalOverflow�*ErrorEvalStringFormat�*ErrorEvalTypeMismatch8ErrorEvalWrongProbeParameterX4ErrorFailedObtainProbeData�<ErrorImplementationWasNotFound�(ErrorIndexOutOfRange�&ErrorInvalidCheckId�BErrorJsonLocationWithLinePosition0ErrorJsonMissingProperty4<ErrorJsonOperatorInstantiationSErrorJsonReaderxDErrorJsonSerializationNotSupported�FErrorJsonSingularLeftRangeInclusive�>ErrorJsonSingularRangeInclusive�HErrorJsonSingularRightRangeInclusive}@ErrorJsonUnexpectedEndOfDocument�0ErrorJsonUnexpectedToken�:ErrorJsonUnsupportedOperation�&ErrorJsonWrongToken&ErrorJsonWrongValue3 ErrorKeyNotFoundO(ErrorLoadingAssemblyc0ErrorMissingJsonProperty�JErrorMultuallyExclusiveJsonProperties�0ErrorNameFieldIsRequired�(ErrorProbeInitialize�,ErrorProbeRequirements7,ErrorRecursionDetectedY@ErrorStringArrayOrObjectExpectedw6ErrorStringOrObjectExpected�8ErrorTargetFilerInDefinition�>ErrorUnrecognizedChecksItemTypeDErrorValueCannotBeNullOrWhitespace=8ErrorValueEndsWithWhiteSpaceb:ErrorValueIsAWhiteSpaceString�2ErrorValueIsAnEmptyString�<ErrorValueStartsWithWhiteSpace�6ErrorVersionFieldIsRequired�<GroupingColumnNameCannotBeNullTNotEnoughPermissionsToRunAssessmentMessage?StringCheckId�StringTarget�BUnsupportedTargetCheckDescription�BUnsupportedTargetCheckDisplayName�:UnsupportedTargetCheckMessage	JUnsupported_PowerShell_parameter_type6	(WarningCheckSkipped1L	(WarningCheckSkipped2	(WarningCheckSkipped3�	0WarningCheckSkipped3Plus
Cannot access {0} {1}. Check {0} has no implementation.EAn id or a list of tags or ids is required for every check list item.(Check target replacement is not allowed.Condition evaluation failed.NConverter cannot read JSON with the specified existing value. {0} is required.@Converter cannot write specified value to JSON. {0} is required.Empty string is not allowed.){0} parameters required, but {1} present.Missing data item "{0}".Evaluation error.Value does not fit type {0}.-String '{0}' cannot be converted to type {1}.8Value '{0}' of type {1} cannot be converted to type {2}.(Probe {0} does not support parameter {1}/Check {0}: Probe {1} failed to obtain data: {2}1Implementation was not found for given target {0}Index out of range.Valid check ID required.{0} Line: {1}. Position: {2}.Property "{0}" was not found.#Operator "{0}" instantiation error.JSON reading error.)JSON serialization for {0} not supported./Singular range does not include its left bound.�SIngular range must include both left and right boundaries. Use single value without any parenthesis for singular ranges: "{0}" instead of "{1}".0Singular range does not include its right bound. Unecpected end of JSON document.Unexpected token "{0}" in {1}.Unsupported operation "{0}"."Encountered {0}, {1} was expected.Wrong value "{0}" for {1}.Key not found: {0} Error loading assembly {0}: {1}.Missing JSON property {0}.#Only one of ({0}) may be specified.)Name field is required for every ruleset.DProbe implementation cannot be instantiated. Implementing type: {0}. Probe requirements were not met.Infinite recursion detected.+String, array, or object expected. Got {0}.:String or object expected for aggregate func, but got {0}.3Target filter was not expected in check definition.&Checks item type {0} is not supported.#Value cannot be null or whitespace.Value ends with white space..Value is a null, empty, or white space string.Value is an empty string.Value starts with white space.,Version field is required for every ruleset.$Grouping column name cannot be null.XMinimal permissions to run SQL assessment are VIEW SERVER STATE and VIEW DATABASE STATE.Check IDTargetNThis check signals when no other check exists for given target and parameters.No checks for the targetNo check found for this target.unsupported type {0}1'{1}' check has been skipped because it needs {0}>Checks '{1}' and '{2}' have been skipped because they need {0}FChecks '{1}', '{2}', and '{3}' have been skipped because they need {0}PChecks '{1}', '{2}', '{3}', and {4} more have been skipped because they need {0}٨{
  "schemaVersion": "1.0",
  "name": "Microsoft ruleset",
  "version": "1.0.280",
  "rules": [
    {
      "id": "AutoCreateStats",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Statistics",
        "QueryOptimizer"
      ],
      "displayName": "Auto-Create Statistics should be on",
      "description": "The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Create statistics setting is ON, the Query Optimizer creates statistics on one or more columns of a table or an indexed view, as necessary, to improve query plans and query performance.",
      "message": "Turn Auto-Create Statistics option on to improve query performance",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/statistics/statistics#CreateStatistics",
      "condition": "@is_auto_create_stats_on",
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "AutoUpdateStats",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Statistics",
        "QueryOptimizer"
      ],
      "displayName": "Auto-Update Statistics should be on",
      "description": "The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.",
      "message": "Turn Auto-Update Statistics option on to improve query performance",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics",
      "condition": "@is_auto_update_stats_on",
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "QueryStoreOn",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "version": "[13.0,)",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "tempdb",
            "model"
          ]
        }
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "QueryStore",
        "Statistics"
      ],
      "displayName": "Query Store should be active",
      "description": "The Query Store feature provides you with insight on query plan choice and performance. It simplifies performance troubleshooting by helping you quickly find performance differences caused by query plan changes. Query Store automatically captures a history of queries, plans, and runtime statistics, and retains these for your review. It separates data by time windows so you can see database usage patterns and understand when query plan changes happened on the server. While Query Store collects queries, execution plans and statistics, its size in the database grows until this limit is reached. When that happens, Query Store automatically changes the operation mode to read-only and stops collecting new data, which means that your performance analysis is no longer accurate.",
      "message": "Make sure Query Store actual operation mode is 'Read Write' to keep your performance analysis accurate",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store",
      "condition": {
        "equal": [
          "@query_store_state",
          2
        ]
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "TF174",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": [
          "[11.0.3368,12.0)",
          "[12.0.2480,13.0)",
          "[13.0,)"
        ],
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Memory",
        "Performance"
      ],
      "displayName": "TF 174 increases the plan cache bucket count",
      "description": "Trace Flag 174 increases the SQL Server plan cache bucket count from 40,009 to 160,001 on 64-bit systems. When the SQL Server plan cache reaches its entry limit, plans that have low cost must be evicted in order to insert new plans. This can cause severe contention on the SOS_CACHESTORE spinlock and a high CPU usage occurs in SQL Server. On 64-bit systems, the number of buckets for the SQL Server plan cache is 40,009. Therefore, the maximum number of entries that can fit inside the SQL Server plan cache is 160,036. Enabling trace flag 174 on high performance systems increases the size of the cache and can avoid SOS_CACHESTORE spinlock contention.",
      "message": "Consider enabling trace flag 174 to increase the plan cache bucket count",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "level": "Information",
      "condition": {
        "in": [
          174,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF634",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Memory",
        "Performance",
        "ColumnStore"
      ],
      "displayName": "TF 634 disables background columnstore compression",
      "description": "Trace Flag 634 disables the background columnstore compression task. SQL Server periodically runs the Tuple Mover background task that compresses columnstore index rowgroups with uncompressed data, one such rowgroup at a time. Columnstore compression improves query performance but also consumes system resources. You can control the timing of columnstore compression manually, by disabling the background compression task with trace flag 634, and then explicitly invoking ALTER INDEX...REORGANIZE or ALTER INDEX...REBUILD at the time of your choice.",
      "message": "Trace Flag 634 disables the background columnstore compression task. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            634,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF652",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "Memory",
        "Pages"
      ],
      "displayName": "TF 652 disables page pre-fetching scans",
      "description": "Trace Flag 652 disables page pre-fetching for scans. The read-ahead process reads the full extent of a referenced database page into the buffer pool, before those contiguous database pages are consumed by scans. Enabling the trace flag can lead to performance issues on queries that leverage pre-fetching.",
      "message": "Trace Flag 652 disables Page Pre-fetching Scans. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "http://support.microsoft.com/kb/920093",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            652,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF661",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 661 disables Ghost Cleanup Task",
      "description": "Trace Flag 661 disables the ghost record removal process. A ghost record is the result of a delete operation. When you delete a record, the deleted record is kept as a ghost record. Later, the deleted record is purged by the ghost record removal process. When you disable this process, the deleted record is not purged. Therefore, the space that the deleted record consumes is not freed. This behavior affects space consumption and the performance of scan operations. If you turn off this trace Flag, the ghost record removal process works correctly.",
      "message": "Trace flag 661 disables the background ghost cleanup task. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/920093",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            661,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF834",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "Memory",
        "ColumnStore"
      ],
      "displayName": "TF 834 enables large-page allocations",
      "description": "Trace Flag 834 causes the server to use large-page memory (LPM) model for the buffer pool allocations. Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Trace flag 834 is NOT recommended on SQL Server instances that use columnstore indexes.",
      "message": "Enable trace flag 834 to use large-page allocations to improve analytical and data warehousing workloads",
      "helpLink": "https://support.microsoft.com/kb/3210239",
      "level": "Information",
      "condition": {
        "in": [
          834,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF845",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Memory",
        "Performance"
      ],
      "displayName": "TF 845 is not needed in SQL Server 2012 and higher versions",
      "description": "Trace Flag 845 supports locking pages in memory in SQL Server Standard edition, which is needed together with trace flag 834 to use the large-page memory (LPM) model for the buffer pool allocations.  Consider enabling TF 834 if you have a server that has a lot of memory, particularly for an analytical or data warehousing workload. Starting with SQL Server 2012 this behavior is enabled by default for Standard edition, and trace flag 845 must not be used.",
      "message": "Disable trace flag 845 in SQL Server 2012 and higher versions",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "condition": {
        "not": {
          "in": [
            845,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF902",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "UpdateIssues"
      ],
      "displayName": "TF 902: Database Upgrade Bypass should be disabled",
      "description": "Trace Flag 902 bypasses execution of database upgrade script when installing a Cumulative Update or Service Pack. This trace flag is not supported to run it continuously in a production environment. If you encounter an error during script upgrade mode, it is recommended to contact Microsoft SQL Customer Service and Support (CSS) for further guidance.",
      "message": "Disable trace flag 902 which bypasses database upgrade",
      "helpLink": "https://support.microsoft.com/help/2163980",
      "condition": {
        "not": {
          "in": [
            902,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1117",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "DBFileConfiguration",
        "Performance"
      ],
      "displayName": "TF 1117 Enables Filegroup-level Autogrow",
      "description": "Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. This trace flag affects all databases and is recommended only if every database is safe to be grow all files in a filegroup by the same amount.",
      "message": "Consider enabling trace flag 1117 to enable filegroup autogrow",
      "helpLink": "https://support.microsoft.com/help/2154845",
      "level": "Information",
      "condition": {
        "in": [
          1117,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1117",
      "itemType": "override",
      "targetFilter": {
        "version": "[13.0,)"
      },
      "displayName": "TF 1117 has no effect in SQL Server 2016 and higher versions",
      "description": "Trace Flag 1117 initiates the growth of every file in the filegroup, when a file in the filegroup meets the autogrow threshold, and together with trace flag 1118, can help reduce allocation contention in the SQL Server TempDB database. Starting with SQL Server 2016, this behavior is controlled by the AUTOGROW_SINGLE_FILE and AUTOGROW_ALL_FILES options of ALTER DATABASE syntax.",
      "message": "Disable trace flag 1117 in SQL Server 2016 and higher versions.",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",
      "condition": {
        "not": {
          "in": [
            1117,
            "@TraceFlag"
          ]
        }
      }
    },
    {
      "id": "TF1118",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Memory",
        "Performance",
        "Pages"
      ],
      "displayName": "TF 1118 Disables Single Page Allocations",
      "description": "Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations.",
      "message": "Consider enabling trace flag 1118 to force page allocations on uniform extents",
      "helpLink": "https://support.microsoft.com/help/328551",
      "level": "Information",
      "condition": {
        "in": [
          1118,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1118",
      "itemType": "override",
      "targetFilter": {
        "version": "[13.0,)"
      },
      "displayName": "TF 1118 has no effect in SQL Server 2016 and higher versions",
      "description": "Trace Flag 1118 forces page allocations on uniform extents instead of mixed extents, and together with trace flag 1117, can help reduce allocation contention in the SQL Server TempDB database. When a new object is created, by default, the first eight pages are allocated from different extents (mixed extents). Afterwards, when more pages are needed, those are allocated from that same extent (uniform extent). The SGAM page is used to track these mixed extents, so can quickly become a bottleneck when numerous mixed page allocations are occurring. This trace flag allocates all eight pages from the same extent when creating new objects, minimizing the need to scan the SGAM page and forces uniform extent allocations instead of mixed page allocations. Starting with SQL Server 2016, this behavior is controlled by the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE syntax.",
      "message": "Disable trace flag 1118 in SQL Server 2016 and higher versions.",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",
      "condition": {
        "not": {
          "in": [
            1118,
            "@TraceFlag"
          ]
        }
      }
    },
    {
      "id": "TF1204",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Locks",
        "Performance"
      ],
      "displayName": "TF 1204 returns deadlock information",
      "description": "Trace Flag 1204 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog.",
      "message": "Trace Flag 1204 returns deadlock information",
      "helpLink": "https://support.microsoft.com/help/832524",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            1204,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1211",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Locks",
        "Performance"
      ],
      "displayName": "TF 1211: Lock Escalation should be enabled",
      "description": "Trace Flag 1211 disables lock escalation based on memory pressure, or based on number of locks. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks. If the lock memory grows large enough, attempts to allocate additional locks for any query may fail and cause performance issues. This trace flag should not be used in order to avoid inability to allocate lock resources because of insufficient memory. If lock escalation needs to be disabled, use trace flag 1224 instead.",
      "message": "Disable trace flag 1211 to allow lock escalation",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "condition": {
        "not": {
          "in": [
            1211,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1222",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Locks",
        "Performance"
      ],
      "displayName": "TF 1222 returns deadlock information",
      "description": "Trace Flag 1222 returns the resources and types of locks that are participating in a deadlock, including the affected command. The resulting information is recorded in the SQL Server Errorlog, in XML format that does not comply with any XSD schema.",
      "message": "Trace Flag 1222 returns deadlock information",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            1222,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1224",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Locks",
        "Performance"
      ],
      "displayName": "TF 1224 should be disabled",
      "description": "Trace Flag 1224 disables lock escalation based on the number of locks, unless SQL Server is under memory pressure. Because SQL Server will not escalate row or page locks to table locks, this can generate an excessive number of locks.",
      "message": "Disable trace flag 1224 to allow lock escalation",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "condition": {
        "not": {
          "in": [
            1224,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1229",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Locks",
        "Performance",
        "CPU"
      ],
      "displayName": "TF 1229: Lock Partitioning should be enabled",
      "description": "Trace Flag 1229 disables lock partitioning regardless of the number of CPUs. By default, SQL Server enables lock partitioning when a server has 16 or more CPUs, to improve the scalability characteristics of larger systems. Disabling lock partitioning may cause can cause spinlock contention and poor performance, or unexpected behaviors when switching partitions.",
      "message": "Disable trace flag 1229 to allow lock partitioning",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide",
      "condition": {
        "not": {
          "in": [
            1229,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1236",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Locks",
        "Performance"
      ],
      "displayName": "TF 1236: Database Lock Partitioning should be enabled",
      "description": "Trace Flag 1236 enables database-level lock partitioning. Lock Partitioning is utilized to improve the scalability characteristics on larger systems.",
      "message": "Enable trace Flag 1236 to allow database lock partitioning",
      "helpLink": "https://support.microsoft.com/help/2926217",
      "condition": {
        "in": [
          1236,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF1236",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[11.0.6020,12.0)",
          "[12.0.4100,)"
        ]
      },
      "displayName": "TF 1236 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions",
      "description": "Trace Flag 1236 enables database-level lock partitioning. Starting with SQL Server 2012 SP3 and SQL Server 2014 SP1, this behavior is controlled by the engine and trace flag 1236 has no effect.",
      "message": "Disable trace flag 1236 in SQL Server 2012 SP3, SQL Server 2014 SP1 and higher versions.",
      "condition": {
        "not": {
          "in": [
            1236,
            "@TraceFlag"
          ]
        }
      }
    },
    {
      "id": "TF1462",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "AvailabilityGroups"
      ],
      "displayName": "TF 1462 should be disabled to allow Log Stream Compression",
      "description": "Trace Flag 1462 disables log stream compression for asynchronous availability groups. This feature is enabled by default on asynchronous replicas to optimize network bandwidth.",
      "message": "Disable trace flag 1462 to allow log stream compression",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/availability-groups/windows/tune-compression-for-availability-group",
      "condition": {
        "not": {
          "in": [
            1462,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2312",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer",
        "Performance"
      ],
      "displayName": "TF 2312 sets the default Cardinality Estimation model",
      "description": "Trace Flag 2312 sets the Query Optimizer cardinality estimation model to the default version of the database compability level of SQL Server 2014 and higher versions. If the database compatibility level is lower than 120, enabling trace flag 2312 uses the cardinality estimation model of SQL Server 2014 (120).",
      "message": "Trace Flag 2312 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2801413",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            2312,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2312",
      "itemType": "override",
      "targetFilter": {
        "version": "[12.0, 13.0)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer",
        "Performance"
      ],
      "level": "Information"
    },
    {
      "id": "TF2312",
      "itemType": "override",
      "targetFilter": {
        "version": "[13.0, )"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer",
        "Performance"
      ],
      "message": "TF2312 enables New CE model to SQL Server 2014 or above versions, dependent of the compatibility level of the database",
      "level": "Information"
    },
    {
      "id": "TF2330",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,)",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "Indexes"
      ],
      "displayName": "TF 2330 disables recording of index usage stats",
      "description": "Trace Flag 2330 disables recording of index usage stats, which could lead to a non-yielding condition in SQL 2005.",
      "message": "Trace Flag 2330 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://blogs.msdn.microsoft.com/ialonso/2012/10/08/faq-around-sys-dm_db_index_usage_stats",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            2330,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2340",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer",
        "Performance"
      ],
      "displayName": "TF 2340 disables Batch Sorts for optimized nested loops joins",
      "description": "Trace Flag 2340 causes SQL Server not to use a sort operation (batch sort) for optimized nested loops joins when generating a plan. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace Flag 2340 disables Batch Sorts for optimized nested loops joins",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            2340,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2371",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "Statistics"
      ],
      "displayName": "TF 2371 enables a linear recompilation threshold for statistics",
      "description": "Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables.",
      "message": "Enable trace Flag 2371 to allow a linear recompilation threshold for statistics",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "level": "Information",
      "condition": {
        "in": [
          2371,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2371",
      "itemType": "override",
      "targetFilter": {
        "version": "[13.0,)"
      },
      "displayName": "TF 2371 has no effect in SQL Server 2016 and higher versions",
      "description": "Trace Flag 2371 causes SQL Server to change the fixed update statistics threshold to a linear update statistics threshold. This is especially useful to keep statistics updated on large tables. Starting with SQL Server 2016, for databases using compatibility level 130 and above, this behavior is controlled by the engine and trace flag 2371 has no effect.",
      "message": "Disable trace flag 2371 in SQL Server 2016 and higher versions when all databases are at compatibility level 130 and above.",
      "condition": {
        "not": {
          "in": [
            2371,
            "@TraceFlag"
          ]
        }
      }
    },
    {
      "id": "TF2389",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Statistics",
        "Performance"
      ],
      "displayName": "TF 2389 enables automatic statistics for Ascending Keys",
      "description": "Trace Flag 2389 enables automatically generated quick statistics for ascending keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace Flag 2389 enables automatic statistics for ascending keys. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2801413",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            2389,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2390",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Statistics",
        "Performance",
        "Indexes"
      ],
      "displayName": "TF 2390 enables automatic statistics for Ascending or Unknown Keys",
      "description": "Trace Flag 2390 enables automatically generated quick statistics for ascending or unknown keys (histogram amendment). This trace flag is recommended to be set in cases where queries access newly inserted ascending key values (such as an IDENTITY column), but the new values are not yet updated in the statistics histogram for the affected columns. In this case the histogram used to estimate cardinality will be adjusted at query compile time. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace Flag 2390 enables automatic statistics for ascending or unknown keys. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2801413",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            2390,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2528",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "DataIntegrity",
        "DBCC"
      ],
      "displayName": "TF 2528 disables parallel operations for integrity checking",
      "description": "Trace Flag 2528 disables parallel checking of objects by DBCC CHECKDB, DBCC CHECKFILEGROUP, and DBCC CHECKTABLE. By default, the degree of parallelism is automatically determined by the query processor. The maximum degree of parallelism is configured just like that of parallel queries. When parallel checks are disabled, the DBCC commands will take longer to complete. Starting with SQL Server 2014 SP2, a MAXDOP option is available to override the max degree of parallelism configuration option of sp_configure for the DBCC statements.",
      "message": "Trace Flag 2528 disables parallel operations for integrity checking",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            2528,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2549",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "DBCC"
      ],
      "displayName": "TF 2549 optimizes PHYSICAL_ONLY option of DBCC CHECKDB",
      "description": "Trace Flag 2549 forces the DBCC CHECKDB command to assume each database file is on a unique disk drive but treating different physical files as one logical file. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but it's not recommended unless it is known that each file is based on a unique physical disk.",
      "message": "Trace Flag 2549 forces DBCC CHECKDB to treat different physical files as one logical file",
      "helpLink": "https://support.microsoft.com/help/2634571",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            2549,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2562",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "DBCC",
        "TempDB"
      ],
      "displayName": "TF 2562 forces the DBCC CHECKDB command to execute in a single batch",
      "description": "Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch regardless of the number of indexes in the database. This trace flag can improve the performance when using the PHYSICAL_ONLY option, but space requirements for TempDB may increase.",
      "message": "Trace Flag 2562 forces the DBCC CHECKDB command to execute in a single batch",
      "helpLink": "https://support.microsoft.com/help/2634571",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            2562,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF2566",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "DBCC",
        "DataIntegrity"
      ],
      "displayName": "TF 2566 disables default data purity check",
      "description": "Trace Flag 2566 forces the DBCC CHECKDB command to execute without data purity check unless the DATA_PURITY option is specified. For databases upgraded from earlier versions of SQL Server, it is recommended to run the DBCC CHECKDB WITH DATA_PURITY command at least once, to enable column-value integrity checks to happen by default.",
      "message": "Trace Flag 2566 disables default data purity check",
      "helpLink": "https://support.microsoft.com/help/945770",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            2566,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF3023",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Backup"
      ],
      "displayName": "TF 3023 enables Backup Checksum option by default",
      "description": "Trace Flag 3023 enables the CHECKSUM option of the BACKUP command by default. This trace flag forces the CHECKSUM option for BACKUP command even when not explicitely set. Starting with SQL Server 2014, this behavior is controlled by setting the Backup Checksum Default configuration option.",
      "message": "Trace Flag 3023 enables CHECKSUM option as default for BACKUP command",
      "helpLink": "https://support.microsoft.com/help/2656988",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            3023,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF3042",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Backup"
      ],
      "displayName": "TF 3042 bypasses the default backup compression pre-allocation algorithm",
      "description": "Trace Flag 3042 bypasses the default backup compression pre-allocation algorithm to allow the backup file to grow only as needed to reach its final size. This trace flag can achieve space savings by allocating only the actual size required for the compressed backup, but might increase the overall backup operation time.",
      "message": "Trace Flag 3042 enables the bypass of the default backup compression",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/backup-restore/backup-compression-sql-server",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            3042,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF3226",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Backup"
      ],
      "displayName": "TF 3226 disables ErrorLog entries for every successful backup operation",
      "description": "Trace Flag 3226 prevents SQL Server from recording an entry to the Errorlog on every successful backup operation. Backup operations are registered in the Errorlog by default. Frequent backup operations can contribute to massive Errorlog files that become unwieldy.",
      "message": "Trace Flag 3226 disables ErrorLog entries for every successful backup operation",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            3226,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF4136",
      "itemType": "override",
      "targetFilter": {
        "version": "[11.0.2316,)"
      },
      "description": "Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace Flag 4136 disables parameter sniffing. Verify need to set a non-default trace flag with the current system build and configuration",
      "level": "Information"
    },
    {
      "id": "TF4136",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag"
      ],
      "displayName": "TF 4136 disables Parameter Sniffing",
      "description": "Trace Flag 4136 disables parameter sniffing unless OPTION(RECOMPILE), WITH RECOMPILE or OPTIMIZE FOR value is used, but does not apply to this SQL Server version. Starting with SQL Server 2016, to accomplish this at the database level use the PARAMETER_SNIFFING option in ALTER DATABASE SCOPED CONFIGURATION. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace Flag 4136 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/980653",
      "condition": {
        "not": {
          "in": [
            4136,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF4137",
      "itemType": "override",
      "targetFilter": {
        "version": "[11.0.2316,)"
      },
      "description": "Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace Flag 4137 causes SQL Server to generate a plan using partial correlation of filters. Verify need to set a non-default trace flag with the current system build and configuration",
      "level": "Information"
    },
    {
      "id": "TF4137",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer",
        "Performance"
      ],
      "displayName": "TF 4137 causes plans to use partial correlation for filters",
      "description": "Trace Flag 4137 causes SQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for partial correlation instead of independence, under the query optimizer cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). However it does not apply to this SQL Server version. Does not apply to CE version 120 or above. Use trace flag 9471 instead. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' query hint. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace flag 4137 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2658214",
      "condition": {
        "not": {
          "in": [
            4137,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF4138",
      "itemType": "override",
      "targetFilter": {
        "version": "[11.0.2325,)"
      },
      "description": "Trace Flag 4138 causes SQL Server to generate a plan that does not use row goal adjustments with queries that contain TOP, OPTION (FAST N), IN, or EXISTS keywords. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'DISABLE_OPTIMIZER_ROWGOAL' query hint. Verify need to set a Non-default trace flag with current system build and configuration.",
      "message": "Trace Flag 4138 enables plan that without row goal adjustments. Verify need to set a non-default trace flag with the current system build and configuration",
      "level": "Information"
    },
    {
      "id": "TF4138",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer",
        "Performance"
      ],
      "displayName": "TF 4138 causes plans to not use Row Goal adjustments",
      "description": "Trace Flag 4138 causes SQL Server to generate a plan that does not use row goal adjustments with queries that contain TOP, OPTION (FAST N), IN, or EXISTS keywords. Starting with SQL Server 2016 SP1, to accomplish this at the query level use the USE HINT 'DISABLE_OPTIMIZER_ROWGOAL' query hint. However it does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration.",
      "message": "Trace flag 4138 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2667211",
      "condition": {
        "not": {
          "in": [
            4138,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF4139",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[11.0.3431,11.0.5058)",
          "[11.0.5532,)"
        ]
      },
      "description": "Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. This trace flag is recommended to be set in cases where queries access newly inserted key values that may change plan shape, but the new values are not yet updated in the statistics histogram for the affected columns. In this case, regardless of the leading statistics column status (ascending, descending, or stationary), the histogram used to estimate cardinality will be adjusted at query compile time. This trace flag does not apply to the cardinality estimation model of SQL Server 2012 and earlier versions (CE 70). Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace Flag 4139 enables automatic statistics for any key ordering. Verify need to set a non-default trace flag with the current system build and configuration",
      "level": "Information"
    },
    {
      "id": "TF4139",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Statistics"
      ],
      "displayName": "TF 4139 enables automatic statistics for any key ordering",
      "description": "Trace Flag 4139 enables automatically generated quick statistics (histogram amendment) regardless of key column status. However, this trace flag does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration.",
      "message": "Trace flag 4139 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2952101",
      "condition": {
        "not": {
          "in": [
            4139,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF4199",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0, 14.0)",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer"
      ],
      "displayName": "TF 4199 enables Query Optimizer fixes",
      "description": "Trace Flag 4199 enables Query Optimizer fixes released in SQL Server Cumulative Updates and Service Packs.",
      "message": "Trace Flag 4199 enables Query Optimizer fixes. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "http://support.microsoft.com/help/974006",
      "level": "Information",
      "condition": {
        "not": {
          "in": [
            4199,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF6498",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[12.0.2474,12.0.2480]",
          "[12.0.4416,12.0.5000)"
        ]
      },
      "message": "Trace Flag 6498 enables concurrent large queries.",
      "level": "Information"
    },
    {
      "id": "TF6498",
      "itemType": "override",
      "targetFilter": {
        "version": "[12.0.5000,)"
      },
      "description": "Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect.",
      "message": "Disable trace flag 6498 in SQL Server 2014 SP2, SQL Server 2016 and higher versions"
    },
    {
      "id": "TF6498",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "Memory"
      ],
      "displayName": "TF 6498 enables additional concurrent large queries",
      "description": "Trace Flag 6498 enables more than one large query compilation to gain access to the big gateway when there is sufficient memory available. However, this trace flag does not apply to this SQL Server version. This trace flag can be used to keep memory usage for the compilation of incoming queries under control, avoiding compilation waits for concurrent large queries. Starting with SQL Server 2014 SP2 and SQL Server 2016, this behavior is controlled by the engine and trace flag 1236 has no effect.",
      "message": "Trace Flag 6498 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/3024815",
      "condition": {
        "not": {
          "in": [
            6498,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF6532",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0.6020,11.0.6518)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 6532 enables performance improvements for Spatial data",
      "description": "Trace Flag 6532 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.",
      "message": "Enable trace flag 6532 to enable performance improvements for Spatial data",
      "helpLink": "https://support.microsoft.com/help/3107399",
      "level": "Information",
      "condition": {
        "in": [
          6532,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF6532.6533",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[11.0.6518,12.0)",
          "[12.0.5000,13.0)"
        ]
      },
      "description": "Trace Flag 6532 and trace flag 6533 enable performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.",
      "message": "Enable trace flag 6532 and trace flag 6533 to enable performance improvements for Spatial data",
      "level": "Information",
      "condition": {
        "and": [
          {
            "in": [
              6532,
              "@TraceFlag"
            ]
          },
          {
            "in": [
              6533,
              "@TraceFlag"
            ]
          }
        ]
      }
    },
    {
      "id": "TF6532.6533",
      "itemType": "override",
      "targetFilter": {
        "version": "[13.0,)"
      },
      "message": "Disable trace flag 6532 in SQL Server 2016 and higher versions."
    },
    {
      "id": "TF6532.6533",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 6532 and TF 6533 enable performance improvements for Spatial data",
      "description": "Trace flags 6532 and 6533 enable performance improvements of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Starting with SQL Server 2016, this behavior is controlled by the engine and trace flags 6532 and 6533 have no effect.",
      "message": "Trace flags 6532 and 6533 do not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/3107399",
      "condition": {
        "and": [
          {
            "not": {
              "in": [
                6532,
                "@TraceFlag"
              ]
            }
          },
          {
            "not": {
              "in": [
                6533,
                "@TraceFlag"
              ]
            }
          }
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF6534",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[11.0.6020,12.0)",
          "[12.0.5000,13.0)"
        ]
      },
      "description": "Trace Flag 6534 enables performance improvements of query operations with spatial data types. The performance gain will vary, depending on the configuration, the types of queries, and the objects.",
      "message": "Enable trace flag 6534 to enable performance improvement of query operations with spatial data types",
      "level": "Information",
      "condition": {
        "in": [
          6534,
          "@TraceFlag"
        ]
      }
    },
    {
      "id": "TF6534",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 6534 enables performance improvements for Spatial data",
      "description": "Trace Flag 6534 enables performance improvement of query operations with spatial data types. However, this trace flag does not apply to this SQL Server version. Verify need to set a Non-default trace flag with current system build and configuration.",
      "message": "Trace flag 6534 does not apply to this SQL Server version. Verify need to set a non-default trace flag with the current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/3107399",
      "condition": {
        "not": {
          "in": [
            6534,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF7412",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[13.0.4001,15.0)",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting",
      "description": "Trace Flag 7412 enables the lightweight profiling infrastructure for live query performance troubleshooting. Consider enabling TF 7412 to have the ability to access runtime information on query execution plans for any session.",
      "message": "Enable trace flag 7412 to enables the lightweight profiling infrastructure for live query performance troubleshooting",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/performance/query-profiling-infrastructure",
      "level": "Information",
      "condition": {
        "in": [
          7412,
          "@TraceFlag"
        ]
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF9024",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "NUMA",
        "Memory",
        "CPU"
      ],
      "displayName": "TF 9024 converts a global log pool memory object into NUMA node partitioned memory object",
      "description": "TF9024 converts a global log pool memory object into NUMA node partitioned memory object.",
      "message": "Verify need to set a Non-default TF with current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            9024,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF9024",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[11.0.3349, 11.0.6020)",
          "[12.0, 12.0.4100)"
        ]
      },
      "message": "Consider enabling TF9024 to convert global log pool memory objects into NUMA node partitioned memory objects.",
      "level": "Information",
      "condition": [
        {
          "in": [
            9024,
            "@TraceFlag"
          ]
        },
        {
          "gt": [
            8,
            {
              "div": [
                "@online_logical_processors",
                "@numa_nodes"
              ]
            }
          ]
        }
      ],
      "probes": [
        "EnabledGlobalTraceFlags",
        "ServerInstanceConfiguration"
      ]
    },
    {
      "id": "TF9024",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[11.0.6020, 12.0)",
          "[12.0.4100,)"
        ]
      },
      "message": "TF9024 is not needed in SQL Server 2012 SP3, SQL Server 2014 SP1 and above."
    },
    {
      "id": "TF8048",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "NUMA",
        "CPU",
        "Memory"
      ],
      "displayName": "TF 8048 converts NUMA partitioned memory objects into CPU partitioned",
      "description": "TF 8048 converts NUMA partitioned memory objects into CPU partitioned.",
      "message": "Verify need to set a Non-default TF with current system build and configuration",
      "helpLink": "https://support.microsoft.com/help/2809338/fix-high-log-write-waits-counter-value-on-a-sql-server-2012-or-sql-ser",
      "level": "Warning",
      "condition": {
        "not": {
          "in": [
            8048,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF8048",
      "itemType": "override",
      "targetFilter": {
        "version": "[12.0.4100,)"
      },
      "message": "TF8048 is not needed in SQL Server 2014 SP2, SQL Server 2016 and above."
    },
    {
      "id": "TF8048",
      "itemType": "override",
      "targetFilter": {
        "version": "[11.0, 12.0.4100)"
      },
      "message": "Consider enabling TF 8048 to convert NUMA partitioned memory objects into CPU partitioned.",
      "level": "Information",
      "condition": [
        {
          "in": [
            8048,
            "@TraceFlag"
          ]
        },
        {
          "gt": [
            8,
            {
              "div": [
                "@online_logical_processors",
                "@numa_nodes"
              ]
            }
          ]
        }
      ],
      "probes": [
        "EnabledGlobalTraceFlags",
        "ServerInstanceConfiguration"
      ]
    },
    {
      "id": "DeprecatedFeatures",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "tempdb",
            "model",
            "msdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Deprecated",
        "Security",
        "UpdateIssues",
        "Performance"
      ],
      "displayName": "Deprecated or discontinued features should not be used",
      "description": "This check detects deprecated or discontinued features used on target SQL Server instance. Deprecated features may be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.",
      "message": "Detected deprecated or discontinued feature uses: @{DeprecatedFeature}. We recommend to replace them with features actual for SQL Server version @{ProductVersion}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object",
      "condition": {
        "equal": [
          "@DeprecatedFeature",
          ""
        ]
      },
      "probes": [
        "DeprecatedFeaturesStats",
        "SQLServerVersion"
      ]
    },
    {
      "id": "SystemHealthSession",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "XEvent",
        "SystemHealth"
      ],
      "displayName": "system_health XEvent session is not active",
      "description": "This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.",
      "message": "Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session",
      "level": "Warning",
      "condition": "@XEvent.SystemHealthCount",
      "probes": [
        "XEvent.SystemHealth"
      ]
    },
    {
      "id": "SPServerDiagnosticsSession",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "XEvent",
        "SystemHealth"
      ],
      "displayName": "sp_server_diagnostics xEvent session is not active",
      "description": "This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine. We recommend that you do not stop, alter, or delete the system health session.",
      "message": "Start the session by using the ALTER EVENT SESSION statement or by using the Extended Events node in Object Explorer",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql",
      "level": "Warning",
      "condition": "@XEvent.SPServerDiagnostics",
      "probes": [
        "XEvent.SPServerDiagnostics"
      ]
    },
    {
      "id": "BlackboxTrace",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Traces"
      ],
      "displayName": "Blackbox trace is configured and running",
      "description": "This trace is designed to behave similarly to an airplane black box, to help you diagnose intermittent server crashes. It consumes more resources than the default trace and should not be running for extended periods of time.",
      "message": "Make sure you still need the blackbox trace and stop it otherwise",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/system-stored-procedures/sp-trace-create-transact-sql",
      "level": "Warning",
      "condition": {
        "not": "@BlackBoxTraceCount"
      },
      "probes": [
        "CountBlackBoxTraces"
      ]
    },
    {
      "id": "DefaultTrace",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Traces"
      ],
      "displayName": "No default trace was found or is not active",
      "description": "Default trace provides troubleshooting assistance to database administrators by ensuring that they have the log data necessary to diagnose problems the first time they occur.",
      "message": "Make sure that there is enough space for SQL Server to write the default trace file. Then have the default trace run by disabling and re-enabling it",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/policy-based-management/default-trace-log-files-disabled",
      "level": "Warning",
      "condition": "@DefaultTraceCount",
      "probes": [
        "CountDefaultTraces"
      ]
    },
    {
      "id": "HintsStatistics",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "QueryOptimizer",
        "Performance",
        "Statistics"
      ],
      "displayName": "Hints are being used",
      "description": "Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.",
      "message": "We recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators, because the SQL Server Query Optimizer typically selects the best execution plan for a query",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql",
      "level": "Information",
      "condition": {
        "@HintUsageCount": 0
      },
      "probes": [
        "Hints.InstanceStatistics"
      ]
    },
    {
      "id": "HintsUsageInModules",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "QueryOptimizer",
        "Performance",
        "Statistics"
      ],
      "displayName": "Hints usage in modules",
      "enabled": false,
      "description": "Hints are options or strategies specified for enforcement by the SQL Server query processor on SELECT, INSERT, UPDATE, or DELETE statements. The hints override any execution plan the Query Optimizer might select for a query. Because the SQL Server Query Optimizer typically selects the best execution plan for a query, we recommend that <join_hint>, <query_hint>, and <table_hint> be used only as a last resort by experienced developers and database administrators.",
      "message": "@{Hint} was used in @{type_desc} @{Schema_Name}.@{Object_Name}",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/queries/hints-transact-sql",
      "level": "Information",
      "probes": [
        "Hints.ModuleUsage"
      ]
    },
    {
      "id": "PlansUseRatio",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "QueryOptimizer"
      ],
      "displayName": "Amount of single use plans in cache is high",
      "description": "Single use plans waste system resources.",
      "message": "Amount of single use plans in cache is high (@{SingleUsePlansUseRatio:P0}). Consider enabling the Optimize for ad hoc workloads setting on heavy OLTP ad-hoc workloads to conserve resources",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option",
      "level": "Warning",
      "condition": {
        "less": [
          "@SingleUsePlansUseRatio",
          0.5
        ]
      },
      "probes": [
        "CachedPlans.SingleUseRatio"
      ]
    },
    {
      "id": "HypotheticalIndexes",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Hypothetical indexes found",
      "description": "Database has indexes that are marked as hypothetical. Hypothetical indexes are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these indexes may not be deleted. It is recommended to drop these objects as soon as possible.",
      "message": "Index @{IndexName} for @{Schema}.@{Object} is marked as hypothetical. It is recommended to drop hypothetical index @{IndexName} as soon as possible",
      "helpLink": "https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes",
      "level": "Warning",
      "probes": [
        "Hypothetical.Indexes"
      ]
    },
    {
      "id": "HypotheticalStatistics",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Statistics"
      ],
      "displayName": "Hypothetical statistics found",
      "description": "Database has statistics that are marked as hypothetical. Hypothetical statistics are created by the Database Tuning Assistant (DTA) during its tests. If a DTA session was interrupted, these statistics may not be deleted. It is recommended to drop these objects as soon as possible.",
      "message": "Statistics @{StatName} for @{Schema}.@{Object} is hypothetical. It is recommended to drop hypothetical statistics @{StatName} as soon as possible",
      "helpLink": "https://blogs.technet.microsoft.com/anurag_sharma/2008/04/15/hypothetical-indexes",
      "level": "Warning",
      "probes": [
        "Hypothetical.Statistics"
      ]
    },
    {
      "id": "LatestCU",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Security",
        "UpdateIssues"
      ],
      "displayName": "SQL Server instance is not up to date",
      "description": "On an installed instance of SQL Server, we recommend that you apply the latest security updates and critical updates including general distribution releases (GDRs), service packs (SPs), and cumulative updates (CUs).",
      "message": "Product version @{ProductVersion} is not the latest available. We recommend keeping your SQL Server up to date and install Service Packs and Cumulative Updates as they are released",
      "helpLink": "https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an",
      "probes": [
        "SQLServerVersion"
      ]
    },
    {
      "id": "LatestCU",
      "itemType": "override",
      "targetFilter": {
        "version": [
          "[11.0.7001, 12.0)",
          "[12.0.6372, 13.0)",
          "[13.0.5820, 14.0)",
          "[14.0.3294, 15.0)",
          "[15.0.4033,)"
        ]
      },
      "displayName": "SQL Server instance is up to date",
      "message": "Product version @{ProductVersion} is the latest available.",
      "helpLink": "https://support.microsoft.com/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an",
      "condition": true
    },
    {
      "id": "FKNoIndexes",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "engineEdition": "OnPremises, ManagedInstance",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Indexes"
      ],
      "displayName": "Foreign key constraints should have corresponding indexes",
      "description": "Unlike primary key constraints, creating a foreign key constraint does not automatically create a corresponding index. However, manually creating an index on a foreign key is often useful.",
      "message": "Create a corresponding index for each foreign key. There is no index on the following foreign keys: @{ConstraintName}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/tables/primary-and-foreign-key-constraints",
      "level": "Warning",
      "condition": {
        "@ConstraintName": ""
      },
      "probes": [
        "FKNoIndexes"
      ]
    },
    {
      "id": "MissedIndexes",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Indexes"
      ],
      "displayName": "Potentially missing indexes",
      "description": "Potentially missing indexes were found based on query history. It may be important to revise them.",
      "message": "Create an index on @{Table} with key columns @{KeyCols}@{IncludedCols: and included columns: #}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide",
      "level": "Information",
      "probes": [
        "MissedIndexes"
      ]
    },
    {
      "id": "FullBackup",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "name": {
          "not": [
            "model",
            "tempdb"
          ]
        },
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Backup"
      ],
      "displayName": "Full backup is missed or outdated",
      "description": "Database doesn't have any full backup or the latest full backup is over 7 days.",
      "message": "The last full backup had been created more than @{threshold} days ago. Create a new full backup",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server",
      "level": "Warning",
      "condition": {
        "not": {
          "equal": [
            "@LastFullBackup",
            null
          ]
        },
        "less": [
          "@LastFullBackup",
          {
            "mul": [
              "@threshold",
              24
            ]
          }
        ]
      },
      "threshold": 7,
      "probes": [
        "DatabaseBackups"
      ]
    },
    {
      "id": "OutdatedTranLogBackup",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Backup"
      ],
      "displayName": "Transaction Log backup is missed or outdated",
      "description": "Database does not have any transaction Log backup since the latest full or differential backup, or it's older than 24H.",
      "message": "Create a backup of Transaction Log. Database recovery model: @{recovery_model_desc}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server",
      "level": "Warning",
      "condition": {
        "not": {
          "equal": [
            "@LastTLBackup",
            null
          ]
        },
        "less": [
          "@LastTLBackup",
          24
        ]
      },
      "probes": [
        "DatabaseBackups"
      ]
    },
    {
      "id": "DbDiffCollation",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBConfiguration",
        "Collation"
      ],
      "displayName": "Database collation doesn't match the collation of master",
      "description": "We recommend that the collations of user-defined databases match the collation of master or model. Otherwise, collation conflicts can occur that might prevent code from executing. For example, when a stored procedure joins one table to a temporary table, SQL Server might end the batch and return a collation conflict error if the collations of the user-defined database and the model database are different. This occurs because temporary tables are created in tempdb, which bases its collation on that of model.",
      "message": "Keep database collation the same as the collation for master or model",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/set-collation-user-defined-databases-match-master-model-databases",
      "level": "Warning",
      "condition": {
        "equal": [
          "@collation_name",
          "@master_collation"
        ]
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "AutoClose",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "name": {
          "not": [
            "master",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "DBConfiguration"
      ],
      "displayName": "Auto Close Option should be OFF",
      "description": "When AUTO_CLOSE is set ON, this can cause performance degradation on frequently accessed databases because of the increased overhead of opening and closing the database after each connection. AUTO_CLOSE also flushes the procedure cache after each connection.",
      "message": "Set AUTO_CLOSE option to OFF",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-auto-close-database-option-to-off",
      "level": "Warning",
      "condition": {
        "not": "@is_auto_close_on"
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "AutoShrink",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBConfiguration",
        "Performance"
      ],
      "displayName": "Auto Shrink Option should be OFF",
      "description": "Shrinking databases is the fastest way to achieve fragmentation. SQL Server goes to the last page in the database, moves it to the first free available space, and then repeats the process again. This shuffles the deck, putting your pages out of order.",
      "message": "Set AUTO_SHRINK option to OFF",
      "helpLink": "https://blogs.msdn.microsoft.com/buckwoody/2009/07/01/sql-server-best-practices-auto-shrink-should-be-off",
      "level": "Warning",
      "condition": {
        "not": "@is_auto_shrink_on"
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "PageVerify",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "name": {
          "not": [
            "master",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBConfiguration",
        "DataIntegrity"
      ],
      "displayName": "PAGE_VERIFY option should be CHECKSUM",
      "description": "When CHECKSUM is enabled for the PAGE_VERIFY database option, the SQL Server Database Engine calculates a checksum over the contents of the whole page, and stores the value in the page header when a page is written to disk. When the page is read from disk, the checksum is recomputed and compared to the checksum value that is stored in the page header. This helps provide a high level of data-file integrity.",
      "message": "Set PAGE_VERIFY option to CHECKSUM",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum",
      "level": "Warning",
      "condition": {
        "@page_verify_option": 2
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "DbChaining",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBConfiguration",
        "Security"
      ],
      "displayName": "Cross-Database Access should be disabled",
      "description": "Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to the additional security risks.",
      "message": "Set DB_CHAINING option to OFF",
      "helpLink": "https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server",
      "level": "Warning",
      "condition": {
        "not": "@is_db_chaining_on"
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "AutoCreateStatsIncremental",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[12.0,)",
        "name": {
          "not": [
            "master",
            "msdb",
            "tempdb"
          ]
        }
      },
      "tags": [
        "DefaultRuleset",
        "DBConfiguration",
        "Statistics",
        "Performance"
      ],
      "displayName": "Incremental option of auto stats should be ON",
      "description": "Incremental statistics update at partition level is a feature introduced in SQL Server 2014. When the option INCREMENTAL is turn on at the database level, newly auto created column statistics will use incremental statistics on partitioned tables by default.",
      "message": "Set AUTO_CREATE_STATISTICS to ON and set INCREMENTAL to ON",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/statistics/statistics",
      "level": "Warning",
      "condition": "@is_auto_create_stats_incremental_on",
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "TrustWorthy",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "name": {
          "not": [
            "master",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBConfiguration",
        "Security"
      ],
      "displayName": "TRUSTWORTHY should be OFF",
      "description": "You can use the TRUSTWORTHY database setting to indicate whether the instance of Microsoft SQL Server trusts the database and the contents within the database. By default, this setting is set to OFF to mitigate certain threats that may be present when a database is attached to the server.",
      "message": "Set TRUSTWORTHY option to OFF",
      "helpLink": "https://support.microsoft.com/help/2183687/guidelines-for-using-the-trustworthy-database-setting-in-sql-server",
      "level": "Warning",
      "condition": {
        "not": "@is_trustworthy_on"
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "ParameterizationNotSimple",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBConfiguration",
        "Performance",
        "QueryOptimizer"
      ],
      "displayName": "PARAMETERIZATION should be SIMPLE",
      "description": "When the PARAMETERIZATION database option is set to SIMPLE, the SQL Server query optimizer may choose to parameterize the queries. This means that any literal values that are contained in a query are substituted with parameters. This process is referred to as simple parameterization. When SIMPLE parameterization is in effect, you cannot control which queries are parameterized and which queries are not. However, you can specify that all queries in a database be parameterized by setting the PARAMETERIZATION database option to FORCED. Regardless of whether you have a Plan-Stability or not, SQL Server will always auto parameterize your SQL Statements, and reuse the cached execution plan over and over again. It doesn't matter how terrible the execution plan is. Therefore you have to know in exact detail the shape of your execution plans, and whether they can lead to some performance related problems.",
      "message": "Set PARAMETERIZATION = SIMPLE and use forced parameterization only on a certain class of queries, instead of all queries",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/performance/specify-query-parameterization-behavior-by-using-plan-guides",
      "level": "Warning",
      "condition": {
        "not": "@is_parameterization_forced"
      },
      "probes": [
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "TempDBFilesNotSameSize",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TempDB",
        "Performance",
        "DBFileConfiguration"
      ],
      "displayName": "TempDB data files are not the same size",
      "description": "We recommend that you create all TempDB data files at the same size.",
      "message": "Make all TempDB data files the same size",
      "helpLink": "https://support.microsoft.com/kb/2154845",
      "level": "Warning",
      "condition": {
        "@filesizeCount": 1
      },
      "probes": [
        "TempDBFiles"
      ]
    },
    {
      "id": "TempDBFilesMultiple4",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TempDB",
        "Performance",
        "DBFileConfiguration"
      ],
      "displayName": "Number of TempDB data files should be in multiples of 4",
      "description": "Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.",
      "message": "Make sure number of TempDB data files is in multiples of 4",
      "helpLink": "https://support.microsoft.com/kb/2154845",
      "level": "Warning",
      "condition": [
        {
          "less": [
            "@online_logical_processors",
            8
          ]
        },
        {
          "equal": [
            {
              "mod": [
                "@physical_name",
                4
              ]
            },
            0
          ]
        }
      ],
      "probes": [
        {
          "id": "DatabaseMasterFiles",
          "params": {
            "dbId": 2,
            "type": 0
          },
          "transform": {
            "type": "aggregate",
            "map": {
              "physical_name": "count"
            }
          }
        },
        "ServerInstanceConfiguration"
      ]
    },
    {
      "id": "TempDBFiles1PerCPU",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TempDB",
        "Performance",
        "DBFileConfiguration"
      ],
      "displayName": "Number of TempDB data files should depend on CPU count",
      "description": "Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.",
      "message": "Make sure to have 1 data file per logical processor (processors count: @{online_logical_processors})",
      "helpLink": "https://support.microsoft.com/kb/2154845",
      "level": "Warning",
      "condition": [
        {
          "greater": [
            "@online_logical_processors",
            8
          ]
        },
        {
          "greaterequal": [
            "@physical_name",
            "@online_logical_processors"
          ]
        }
      ],
      "probes": [
        {
          "id": "DatabaseMasterFiles",
          "params": {
            "dbId": 2,
            "type": 0
          },
          "transform": {
            "type": "aggregate",
            "map": {
              "physical_name": "count"
            }
          }
        },
        "ServerInstanceConfiguration"
      ]
    },
    {
      "id": "TempDBFilesNotLess8",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TempDB",
        "Performance",
        "DBFileConfiguration"
      ],
      "displayName": "Number of TempDB data files should be at least 8",
      "description": "Number of TempDB data files should correlate with the number of (logical) processors on the machine. As a general rule, if the number of logical processors is less than or equal to 8, use the same number of data files as logical processors. If the number of logical processors is greater than 8, use 8 data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.",
      "message": "Add extra data files to TempDB. There are @{physical_name} data files, should be at least 8",
      "helpLink": "https://support.microsoft.com/kb/2154845",
      "level": "Warning",
      "condition": [
        {
          "less": [
            "@online_logical_processors",
            9
          ]
        },
        {
          "greater": [
            "@physical_name",
            7
          ]
        }
      ],
      "probes": [
        {
          "id": "DatabaseMasterFiles",
          "params": {
            "dbId": 2,
            "type": 0
          },
          "transform": {
            "type": "aggregate",
            "map": {
              "physical_name": "count"
            }
          }
        },
        "ServerInstanceConfiguration"
      ]
    },
    {
      "id": "TempDBFilesAutoGrowth",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "TempDB",
        "Performance",
        "DBFileConfiguration"
      ],
      "displayName": "TempDB data files have different auto growth settings",
      "description": "TempDB data files should be of equal size within each filegroup, as SQL Server uses a proportional-fill algorithm that favors allocations in files with more free space.",
      "message": "Make Autogrowth settings the same for each TempDB data file",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database",
      "level": "Warning",
      "condition": {
        "and": [
          {
            "@growth": 1
          },
          {
            "@is_percent_growth": 1
          }
        ]
      },
      "probes": [
        {
          "id": "DatabaseMasterFiles",
          "params": {
            "dbId": 2,
            "type": 0
          },
          "transform": {
            "type": "aggregate",
            "map": {
              "growth": "count",
              "is_percent_growth": "count"
            }
          }
        }
      ]
    },
    {
      "id": "FilesAutogrowth",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "version": "[13.0.4001,)",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "DBFileConfiguration"
      ],
      "displayName": "Database files have Autogrowth setting over 1GB",
      "description": "A data or log file will be extended with auto-growth value to prevent the lack of free space in files. This process can perform significant impact on SQL Server performance if auto-growth value gets over 1 GB. By default, SQL Server will put zeros to a newly allocated space. And the more space it takes, the more time it takes to initialize it.",
      "message": "Set File Growth to less than 1GB for files: @{FileName}",
      "helpLink": "https://support.microsoft.com/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server",
      "level": "Warning",
      "condition": {
        "@FileName": ""
      },
      "probes": [
        "Autogrow1GB"
      ]
    },
    {
      "id": "DuplicateIndexes",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Indexes"
      ],
      "displayName": "There are tables with duplicate indexes",
      "description": "There are tables with duplicate indexes according to their definitions. We recommended to revise all these objects as soon as possible.",
      "message": "Consider removing duplicate indexes in table @{Table}: @{ToDelete}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide",
      "level": "Warning",
      "probes": [
        {
          "id": "IndexesDefinitions",
          "transform": {
            "type": "duplicateIndexes"
          }
        }
      ]
    },
    {
      "id": "RedundantIndexes",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Indexes"
      ],
      "displayName": "There are tables with possibly redundant indexes",
      "description": "There are tables with possibly redundant indexes according to the set of key and included columns. We recommended to revise all these objects as soon as possible.",
      "message": "Consider removing redundant indexes in table @{Table}: @{Indexes}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/sql-server-index-design-guide",
      "level": "Warning",
      "probes": [
        {
          "id": "IndexesDefinitions",
          "transform": {
            "type": "redundantIndexes"
          }
        }
      ]
    },
    {
      "id": "UserObjectsInMaster",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": "master",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "masterDB",
        "Backup"
      ],
      "displayName": "User objects in database master",
      "description": "We highly recommend you not create user objects in the master database. If it's unavoidable for some reason, make sure to back up the database more frequently.",
      "message": "Remove user objects from database master: @{Object_Name}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/databases/master-database",
      "condition": {
        "@Object_Name": ""
      },
      "probes": [
        "UserObjectsCountInMasterDB"
      ]
    },
    {
      "id": "HighCPUUsage",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "CPU"
      ],
      "displayName": "High CPU usage on server",
      "description": "Keeping CPU usage rates within normal ranges is vital for servers hosting SQL Server instances. A continually high rate of CPU usage may indicate the need to upgrade the CPU or add multiple processors. Alternatively, a high CPU usage rate may indicate a poorly tuned or designed application. Optimizing the application can lower CPU utilization.",
      "message": "Investigate high CPU utilization on server hosting this instance. Last 2 hours: total CPU usage is ~@{AVGTotalCPUUsage}%, usage by SQL Server is ~@{AVGSQLCPUUsage}%",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/performance-monitor/monitor-cpu-usage",
      "level": "Warning",
      "threshold": 70,
      "condition": {
        "less": [
          "@AVGTotalCPUUsage",
          "@threshold"
        ]
      },
      "probes": [
        "CpuUsage"
      ]
    },
    {
      "id": "ReplErrors24H",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Replication"
      ],
      "displayName": "Replication errors in the last 24 hours",
      "description": "This check searches for errors in distribution database agent's history table for the last 24 hours.",
      "message": "Review replication errors for the following publications: @{publication}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/replication/sql-server-replication",
      "level": "Warning",
      "condition": {
        "@publication": ""
      },
      "probes": [
        "ReplicationErrors"
      ]
    },
    {
      "id": "AgentAlertsSeverity10",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 10",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        825,
        833,
        855,
        856,
        3452,
        3619,
        17179,
        17883,
        17884,
        17887,
        17888,
        17890,
        28036
      ],
      "severityN": 10,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity16",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 16",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        2508,
        2511,
        3271,
        5228,
        5229,
        5242,
        5243,
        5250,
        5901,
        17130,
        17300
      ],
      "severityN": 16,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity17",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 17",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        802,
        845,
        1101,
        1105,
        1121,
        1214,
        8642,
        9002
      ],
      "severityN": 17,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity19",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 19",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        701
      ],
      "severityN": 19,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity20",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 20",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        3624
      ],
      "severityN": 20,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity21",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 21",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        605
      ],
      "severityN": 21,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity22",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 22",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        5180,
        8966
      ],
      "severityN": 22,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity23",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 23",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        5572,
        9100
      ],
      "severityN": 23,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "AgentAlertsSeverity24",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Agent"
      ],
      "displayName": "Agent doesn't rise alerts for errors with severity 24",
      "description": "Events are generated by SQL Server and entered into the Microsoft Windows application log. SQL Server Agent reads the application log and compares events written there to alerts that you have defined. When SQL Server Agent finds a match, it fires an alert, which is an automated response to an event. In addition to monitoring SQL Server events, SQL Server Agent can also monitor performance conditions and Windows Management Instrumentation (WMI) events.",
      "message": "Consider creating alerts for the following errors: @{error_ids}",
      "helpLink": "https://docs.microsoft.com/sql/ssms/agent/alerts",
      "level": "Warning",
      "condition": [
        {
          "in": [
            "@severityN",
            "@severity"
          ]
        },
        {
          "intersect": [
            "@error_ids",
            "@message_id"
          ]
        }
      ],
      "error_ids": [
        823,
        824,
        832
      ],
      "severityN": 24,
      "probes": [
        "SysAlerts"
      ]
    },
    {
      "id": "WeakPassword",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Security",
        "WeakPassword"
      ],
      "displayName": "Weak password",
      "description": "Some user logins have weak passwords.",
      "message": "Make sure to set strong passwords on the following logins: @{PasswordData}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/security/strong-passwords",
      "probes": [
        "WeakPassword"
      ]
    },
    {
      "id": "VLFCount",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Backup",
        "Performance"
      ],
      "displayName": "VLF count",
      "description": "The SQL Server Database Engine divides each physical log file internally into a number of virtual log files (VLFs). Virtual log files have no fixed size, and there is no fixed number of virtual log files for a physical log file. The Database Engine chooses the size of the virtual log files dynamically while it is creating or extending log files. The Database Engine tries to maintain a small number of virtual files. The size of the virtual files after a log file has been extended is the sum of the size of the existing log and the size of the new file increment. The size or number of virtual log files cannot be configured or set by administrators. If the log files grow to a large size in many small increments, they will have many virtual log files. This can slow down database startup and also log backup and restore operations. Conversely, if the log files are set to a large size with few or just one increment, they will have few very large virtual log files. We recommend that you assign log files a size value close to the final size required, using the required increments to achieve optimal VLF distribution, and also have a relatively large growth_increment value.",
      "message": "Update transaction log settings to reduce the number of VLFs (current number is: @{RecoveryUnitId})",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide",
      "condition": {
        "less": [
          "@RecoveryUnitId",
          "@threshold"
        ]
      },
      "threshold": 50,
      "probes": [
        {
          "id": "VLF",
          "transform": {
            "type": "aggregate",
            "map": {
              "RecoveryUnitId": {
                "type": "count",
                "distinct": false
              }
            }
          }
        }
      ]
    },
    {
      "id": "TF8015",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,11.0.3349)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "CPU",
        "NUMA"
      ],
      "displayName": "TF 8015 disables auto-detection and NUMA setup",
      "description": "SQL Server allows you to group CPUs into nodes referred to as soft-NUMA. You usually configure soft-NUMA when you have many CPUs and do not have hardware NUMA, but you can also use soft-NUMA to subdivide hardware NUMA nodes into smaller groups.",
      "message": "Disable trace flag 8015 for this SQL Server instance. This TF does not apply to this SQL Server version",
      "helpLink": "https://techcommunity.microsoft.com/t5/SQL-Server-Support/How-It-Works-Soft-NUMA-I-O-Completion-Thread-Lazy-Writer-Workers/ba-p/316044",
      "condition": {
        "not": {
          "in": [
            8015,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF8032",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 8032 reverts the cache limit parameters to the SQL Server 2005 RTM",
      "description": "Trace Flag 8032 reverts the cache limit parameters to the SQL Server 2005 RTM setting but can cause poor performance if large caches make less memory available for other memory consumers like BP.",
      "message": "The cache limit parameters reverted to the SQL Server 2005 RTM setting but can cause poor performance if large caches make less memory available for other memory consumers like BP",
      "condition": {
        "not": {
          "in": [
            8032,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF8744",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,12.0)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 8744 disables pre-fetching for the Nested Loop operator",
      "description": "Trace flag 8744 disables pre-fetching for the Nested Loops operator. Incorrect use of this trace flag may cause additional physical reads when SQL Server executes plans that contain the Nested Loops operator.",
      "message": "Disable trace flag 8744 for this SQL Server instance. This TF does not apply to this SQL Server version",
      "helpLink": "https://support.microsoft.com/help/920093/tuning-options-for-sql-server-when-running-in-high-performance-workloa",
      "condition": {
        "not": {
          "in": [
            8744,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF9347",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,13.0)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 9347 disables batch mode for sort operator",
      "description": "Trace flag 9347 disables batch mode for sort operator. SQL Server 2016 (13.x) introduced a new batch mode sort operator that boosts performance for many analytical queries.",
      "message": "Disable trace flag 9347 for this SQL Server instance. This TF does not apply to this SQL Server version",
      "condition": {
        "not": {
          "in": [
            9347,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF9349",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,13.0)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance"
      ],
      "displayName": "TF 9349 disables batch mode for top N sort operator",
      "description": "Trace flag 9349 disables batch mode for top N sort operator. SQL Server 2016 (13.x) introduced a new batch mode top sort operator that boosts performance for many analytical queries.",
      "message": "Disable trace flag 9349 for this SQL Server instance. This TF does not apply to this SQL Server version",
      "condition": {
        "not": {
          "in": [
            9349,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF9389",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,13.0)",
        "platform": "Windows",
        "engineEdition": "OnPremises, ManagedInstance"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "TempDB"
      ],
      "displayName": "TF 9389 enables dynamic memory grant for batch mode operators",
      "description": "Trace flag 9389 enables additional dynamic memory grant for batch mode operators. If a query does not get all the memory it needs, it spills data to TempDB, incurring additional I/O and potentially impacting query performance. If the dynamic memory grant trace flag is enabled, a batch mode operator may ask for additional memory and avoid spilling to TempDB if additional memory is available.",
      "message": "Disable trace flag 9389 for this SQL Server instance. The TF does not apply to this SQL Server version",
      "condition": {
        "not": {
          "in": [
            9389,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF9476",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,13.0)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "QueryOptimizer"
      ],
      "displayName": "TF 9476 causes SQL Server to generate a plan using Simple Containment assumption",
      "description": "Trace flag 9476 causes SQL Server to generate a plan using the Simple Containment assumption instead of the default Base Containment assumption, under the query optimizer cardinality estimation model of SQL Server 2014 (12.x) through SQL Server 2017 versions.",
      "message": "Disable trace flag 9476 for this SQL Server instance. The TF does not apply to this SQL Server version",
      "condition": {
        "not": {
          "in": [
            9476,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF9481",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,12.0)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "QueryOptimizer",
        "Performance"
      ],
      "displayName": "TF 9481 enables Legacy CE model, irrespective of the compatibility level of the database",
      "description": "Trace flag 9481 enables you to set the query optimizer cardinality estimation model to the SQL Server 2012 (11.x) and earlier versions, irrespective of the compatibility level of the database.",
      "message": "Disable trace flag 9481 for this SQL Server instance. The TF does not apply to this SQL Server version",
      "condition": {
        "not": {
          "in": [
            9481,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "TF10204",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "version": "[11.0,13.0)",
        "platform": "Windows",
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "ColumnStore"
      ],
      "displayName": "TF 10204 disables merge/recompress during columnstore index reorganization",
      "description": "Trace flag 10204 disables merge/recompress during columnstore index reorganization. In SQL Server 2016 (13.x), when a columnstore index is reorganized, there is new functionality to automatically merge any small compressed rowgroups into larger compressed rowgroups, as well as recompressing any rowgroups that have a large number of deleted rows.",
      "message": "Disable trace flag 10204 for this SQL Server instance. The TF does not apply to this SQL Server version",
      "condition": {
        "not": {
          "in": [
            10204,
            "@TraceFlag"
          ]
        }
      },
      "probes": [
        "EnabledGlobalTraceFlags"
      ]
    },
    {
      "id": "SPNaming",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "level": "Warning",
      "tags": [
        "DefaultRuleset",
        "Naming"
      ],
      "displayName": "Stored Procedure Naming",
      "description": "In SQL Server, the sp_ prefix designates system stored procedures. If you use that prefix for your stored procedures, the name of your procedure might conflict with the name of a system stored procedure that will be created in the future. If such a conflict occurs, your application might break if your application refers to the procedure without qualifying the reference by schema. In this situation, the name will bind to the system procedure instead of to your procedure.",
      "message": "Rename the following stored procedures to get rid of the sp_ prefix: @{ObjectName}",
      "helpLink": "https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172115(v=vs.100)",
      "condition": {
        "not": "@ObjectName"
      },
      "probes": [
        "BadNamingSP"
      ]
    },
    {
      "id": "ObjectNamingSpecialChar",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "level": "Warning",
      "tags": [
        "DefaultRuleset",
        "Naming"
      ],
      "displayName": "Object Naming",
      "description": "If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object.",
      "message": "Rename the following objects to get rid of special characters: @{ObjectName}",
      "helpLink": "https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)",
      "condition": {
        "not": "@ObjectName"
      },
      "probes": [
        "BadNamingSpecialChars"
      ]
    },
    {
      "id": "ColumnNamingSpecialChar",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "level": "Warning",
      "tags": [
        "DefaultRuleset",
        "Naming"
      ],
      "displayName": "Column Naming",
      "description": "If you name a database object by using any character in the following table, you make it more difficult not only to reference that object but also to read code that contains the name of that object.",
      "message": "Rename the following columns to get rid of special characters: @{ObjectName}",
      "helpLink": "https://docs.microsoft.com/previous-versions/visualstudio/visual-studio-2010/dd172134(v=vs.100)",
      "condition": {
        "not": "@ObjectName"
      },
      "probes": [
        "BadNamingSpecialCharsColumns"
      ]
    },
    {
      "id": "FnNaming",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "level": "Warning",
      "tags": [
        "DefaultRuleset",
        "Naming"
      ],
      "displayName": "User Function Naming",
      "description": "In SQL Server, the fn_ prefix designates system functions. If you use that prefix for your functions, the name of your function might conflict with the name of a system function that will be created in the future. If such a conflict occurs, your application might break if your application refers to the function without qualifying the reference by schema. In this situation, the name will bind to the system function instead of to your function.",
      "message": "Rename the following functions to get rid of the fn_ prefix: @{ObjectName}",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/create-function-transact-sql",
      "condition": {
        "not": "@ObjectName"
      },
      "probes": [
        "BadNamingUserFunctions"
      ]
    },
    {
      "id": "ObjectNamingResKeywords",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "level": "Warning",
      "tags": [
        "DefaultRuleset",
        "Naming"
      ],
      "displayName": "Object names contain reserved keywords",
      "description": "Microsoft SQL Server uses reserved keywords for defining, manipulating, and accessing databases. Reserved keywords are part of the grammar of the Transact-SQL language that is used by SQL Server to parse and understand Transact-SQL statements and batches. Although it is syntactically possible to use SQL Server reserved keywords as identifiers and object names in Transact-SQL scripts, you can do this only by using delimited identifiers.",
      "message": "Rename the following objects to get rid of reserved keywords: @{ObjectName}",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/language-elements/reserved-keywords-transact-sql",
      "condition": {
        "not": "@ObjectName"
      },
      "probes": [
        "BadNamingKeywords"
      ]
    },
    {
      "id": "DeprFeaturesInModules",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "tempdb",
            "model",
            "msdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Security",
        "Deprecated",
        "LongRunningChecks",
        "UpdateIssues"
      ],
      "displayName": "Use of deprecated or discontinued features in modules",
      "description": "Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.",
      "message": "Consider getting rid of the following deprecated or discontinued features in @{ObjectName}: @{Keyword}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object",
      "level": "Warning",
      "probes": [
        "DeprecatedFeaturesSQLModules"
      ]
    },
    {
      "id": "DeprFeaturesInJobs",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Security",
        "Deprecated",
        "Agent",
        "Jobs",
        "LongRunningChecks",
        "UpdateIssues"
      ],
      "displayName": "Use of deprecated or discontinued features in modules",
      "description": "Deprecated features are scheduled to be removed in a future release of SQL Server. Discontinued features have been removed from specific versions of SQL Server.",
      "message": "Consider getting rid of the following deprecated or discontinued features in @{ObjectName}: @{Keyword}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object",
      "level": "Warning",
      "probes": [
        "DeprecatedFeaturesJobs"
      ]
    },
    {
      "id": "NUMANodeSingleCPU",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "NUMA",
        "CPU",
        "Memory",
        "Performance"
      ],
      "displayName": "Single CPU assigned to NUMA node",
      "description": "Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.",
      "message": "Consider assigning additional CPUs to NUMA nodes that have only one assigned CPU",
      "helpLink": "https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)",
      "level": "Warning",
      "condition": {
        "not": "@nodes_single_cpu"
      },
      "probes": [
        "ServerInstanceConfiguration"
      ]
    },
    {
      "id": "NUMANodeNoCPU",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "NUMA",
        "Performance",
        "CPU",
        "Memory"
      ],
      "displayName": "NUMA nodes without CPUs",
      "description": "Microsoft SQL Server is non-uniform memory access (NUMA) aware. NUMA architecture provides a scalable solution to performance problem. Computers with hardware NUMA have more than one system bus, each serving a small set of processors. Each group of processors has its own memory and possibly its own I/O channels, but each CPU can access memory associated with other groups in a coherent way. Each group is called a NUMA node. The number of CPUs within a NUMA node depends on the hardware vendor. Your hardware manufacturer can tell you if your computer supports hardware NUMA.",
      "message": "Make sure that all NUMA nodes have assigned CPUs",
      "helpLink": "https://docs.microsoft.com/previous-versions/sql/sql-server-2008-r2/ms178144(v=sql.105)",
      "level": "Warning",
      "condition": {
        "not": "@NodeCnt"
      },
      "probes": [
        "AffinityNUMANodeNoAssignedCPUs"
      ]
    },
    {
      "id": "IndexKeyGuid",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "tempdb",
            "model",
            "msdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Guid in clustered index key column",
      "description": "A big reason for a clustered index is when you often want to retrieve rows for a range of values for a given column. Because the data is physically arranged in that order, the rows can be extracted very efficiently. Something like a GUID, while excellent for a primary key, could be positively detrimental to performance, as there will be additional cost for inserts and no perceptible benefit on selects.",
      "message": "Get rid of GUIDs in the following clustered indexes keys: @{IndexName}",
      "helpLink": "https://azure.microsoft.com/blog/uniqueidentifier-and-clustered-indexes/",
      "level": "Warning",
      "probes": [
        "IndexesGuidKeyColumns"
      ]
    },
    {
      "id": "IndexesLargeKeys",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,13.0)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Indexes keys with more than 900 bytes",
      "description": "When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.",
      "message": "Get rid of keys larger than 900 bytes in index @{FullName}",
      "helpLink": "http://msdn.microsoft.com/library/ms191241.aspx",
      "level": "Warning",
      "condition": {
        "le": [
          "@KeySize",
          900
        ]
      },
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "IndexesLargeKeysNonClust",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[13.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "NonClustered indexes keys with more than 1700 bytes",
      "description": "When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 1700-byte limit for the maximum total size of all non-clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.",
      "message": "Get rid of keys larger than 1700 bytes in index @{FullName}",
      "helpLink": "http://msdn.microsoft.com/library/ms191241.aspx",
      "level": "Warning",
      "condition": [
        {
          "le": [
            "@KeySize",
            1700
          ]
        },
        {
          "not": {
            "in": [
              "@Type",
              [
                2,
                6
              ]
            ]
          }
        }
      ],
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "IndexesLargeKeysClust",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[13.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Clustered indexes keys with more than 900 bytes",
      "description": "When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size. SQL Server retains the 900-byte limit for the maximum total size of all clustered index key columns. This excludes nonkey columns that are included in the definition of nonclustered indexes.",
      "message": "Get rid of keys larger than 900 bytes in index @{FullName}",
      "helpLink": "http://msdn.microsoft.com/library/ms191241.aspx",
      "level": "Warning",
      "condition": [
        {
          "le": [
            "@KeySize",
            900
          ]
        },
        {
          "not": {
            "in": [
              "@Type",
              [
                1,
                5
              ]
            ]
          }
        }
      ],
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "DisabledIndexes",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Disabled Indexes exist",
      "description": "If you need to load a lot of data quickly, you can disable nonclustered indexes in order to improve performance. After the data load finishes, enable the nonclustered indexes again by rebuilding them. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling nonclustered indexes is safer than dropping and recreating them because scripting indexes is hard. Unfortunately, sometimes our load processes crash before enabling the indexes again, or sometimes we manually load data and we forget to rebuild them.",
      "message": "Remove or enable this disabled index: @{FullName}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/indexes/disable-indexes-and-constraints",
      "level": "Warning",
      "condition": {
        "@IsDisabled": false
      },
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "IndexesFillFactor",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Index fill factor lower 80%",
      "description": "The fill-factor option is provided for fine-tuning index data storage and performance. When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. The empty space is reserved between the index rows rather than at the end of the index.",
      "message": "Review index @{FullName} as its fill factor @{FillFactor} is lower than 80 percent",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/indexes/specify-fill-factor-for-an-index",
      "level": "Warning",
      "condition": [
        {
          "less": [
            "@FillFactor",
            1
          ]
        },
        {
          "ge": [
            "@FillFactor",
            80
          ]
        }
      ],
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "NonUniqueClusterIndex",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Non-unique clustered indexes",
      "description": "Index uniqueness is highly desirable attribute of a clustering key, and goes hand-in-hand with index narrowness. SQL Server does not require a clustered index to be unique, but yet it must have some means of uniquely identifying every row. That’s why, for non-unique clustered indexes, SQL Server adds to every duplicate instance of a clustering key value a 4-byte integer value called a uniqueifier. This uniqueifier is added everywhere the clustering key is stored. That means the uniqueifier is stored in both clustered and non-clustered indexes. As you can imagine, if there are many rows using the same clustering key value, this can become quite expensive.",
      "message": "Review this clustered index @{FullName} as it is non-unique",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described",
      "level": "Warning",
      "condition": [
        {
          "gt": [
            "@Type",
            1
          ]
        },
        {
          "@IsUnique": true
        }
      ],
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "SuspectPages",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleSet",
        "Pages",
        "DataIntegrity"
      ],
      "displayName": "Suspect pages",
      "description": "The suspect_pages table is used for maintaining information about suspect pages, and is relevant in helping to decide whether a restore is necessary.",
      "message": "Run DBCC CHECKDB to verify affected database. Suspect pages were found: @{EventType}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server",
      "level": "Warning",
      "probes": [
        "SuspectPagesValidation"
      ]
    },
    {
      "id": "SparseFiles",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleSet",
        "Snapshots",
        "Backup",
        "DataIntegrity"
      ],
      "displayName": "Sparse files",
      "description": "If the file is sparse or compressed, the NTFS file system may deallocate disk space in the file. This sets the range of bytes to zeroes (0) without extending the file size.",
      "message": "Get rid of sparse files: @{SparseFiles}",
      "helpLink": "https://blogs.msdn.microsoft.com/jorgepc/2010/11/25/what-are-sparse-files-and-why-should-i-care-as-sql-server-dba/",
      "level": "Warning",
      "probes": [
        "SparseFilesValidation"
      ]
    },
    {
      "id": "TableNoIndex",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "tempdb",
            "model",
            "msdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Tables without indexes",
      "description": "Each table in the database has one or more pages. To keep track of those pages, SQL Server uses a special set of pages, called IAM (for Index Allocation Map) pages. In spite of the word “Index” in the name, IAMs are used for non-indexed tables as well. These are called heaps. All the data is there, but the only way to find anything is to read it starting at the beginning. For a very large table, this will be terribly inefficient.",
      "message": "Review table @{TableName} and create reasonable indexes",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes",
      "level": "Warning",
      "condition": [
        {
          "gt": [
            "@IndexCount",
            1
          ]
        },
        {
          "gt": [
            "@MaxIndexId",
            0
          ]
        }
      ],
      "probes": [
        "TableIndexes"
      ]
    },
    {
      "id": "TableNoClusteredIndex",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "tempdb",
            "model",
            "msdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Tables without clustered indexes",
      "description": "Tables without clustered indexes are called heaps. They’re scattered on disk anywhere that SQL Server can find a spot, and they’re not stored in any order whatsoever. This can make for really fast inserts – SQL Server can just throw the data down – but slow selects, updates, and deletes.",
      "message": "Review table @{TableName} and consider creating a clustered index",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/indexes/heaps-tables-without-clustered-indexes",
      "level": "Warning",
      "condition": [
        {
          "le": [
            "@IndexCount",
            1
          ]
        },
        {
          "gt": [
            "@MinIndexId",
            0
          ]
        }
      ],
      "probes": [
        "TableIndexes"
      ]
    },
    {
      "id": "TablePSAlign",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "name": {
          "not": [
            "master",
            "tempdb",
            "model",
            "msdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Table index not aligned with PS",
      "description": "Table partitioning is a complex way to break out your large tables into smaller, more manageable chunks, but it comes with a lot of management heartache. One of the challenges is making sure that your indexes are partitioned and aligned the same way as your clustered index.",
      "message": "Consider recreating index @{IndexName} in table @{TableName} to have it aligned with your schema",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/partitions/partitioned-tables-and-indexes",
      "level": "Warning",
      "probes": [
        "TableIndexesPartitioned"
      ]
    },
    {
      "id": "LoginNoPassword",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Security",
        "WeakPassword"
      ],
      "displayName": "Logins with no passwords",
      "description": "Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords.",
      "message": "Make sure to set strong passwords on the following logins: @{PasswordData}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/security/password-policy",
      "probes": [
        "NullPassword"
      ]
    },
    {
      "id": "LoginEqPassword",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Security",
        "WeakPassword"
      ],
      "displayName": "Logins with passwords that are same as the login names",
      "description": "Password complexity policies are designed to deter brute force attacks by increasing the number of possible passwords.",
      "message": "Please review logins with password equals to login: @{PasswordData}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/security/password-policy",
      "probes": [
        "NamePassword"
      ]
    },
    {
      "id": "SystemHealth",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "XEvent",
        "SystemHealth",
        "Performance"
      ],
      "displayName": "System Health important messages",
      "description": "The system_health session is an Extended Events session that is included by default with SQL Server. This session starts automatically when the SQL Server Database Engine starts, and runs without any noticeable performance effects. The session collects system data that you can use to help troubleshoot performance issues in the Database Engine",
      "message": "Error @{Error_Number} has occured @{Error_Count} times. Last time was @{Last_Logged_Days_Ago} days ago",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/extended-events/use-the-system-health-session",
      "level": "Warning",
      "probes": [
        "SystemHealth"
      ]
    },
    {
      "id": "RarelyUsedIndex",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Indexes",
        "Performance"
      ],
      "displayName": "Rarely used index",
      "description": "Rarely used indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used quite often. It makes sense to compare impact of writing operations versus rare reading speedup.",
      "message": "Make sure you need index @{IndexName} as it's used too rarely",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql",
      "level": "Warning",
      "condition": [
        {
          "@Hits": 0
        },
        {
          "ge": [
            "@ReadsRatio",
            "@ReadsThreshold"
          ]
        },
        {
          "@IsPrimaryKey": true
        }
      ],
      "ReadsThreshold": 5,
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "UnusedIndex",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Index",
        "Performance"
      ],
      "displayName": "Unused index",
      "description": "Unused indexes can slow down database's performance. Time of write operations is increased because of index maintenance, but index is not used anywhere.",
      "message": "Make sure you need index @{IndexName} as it's unused",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/drop-index-transact-sql",
      "level": "Warning",
      "condition": [
        {
          "and": [
            {
              "ne": [
                "@Type",
                2
              ]
            },
            {
              "ne": [
                "@Type",
                6
              ]
            }
          ]
        },
        {
          "@IsPrimaryKey": true
        },
        {
          "gt": [
            "@Hits",
            0
          ]
        }
      ],
      "probes": [
        "IndexesDefinitions"
      ]
    },
    {
      "id": "SkewedCompatibilityLevel",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "CompatibilityLevel",
        "Security",
        "Performance",
        "UpdateIssues"
      ],
      "displayName": "Database with skewed compatibility level",
      "description": "Some databases may have a compatibility level lower than the allowed level by the Database Engine.",
      "message": "Update database compatibility level (current level: @{CompatibilityLevel})",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-compatibility-level",
      "level": "Warning",
      "condition": {
        "ge": [
          {
            "div": [
              "@CompatibilityLevel",
              10
            ]
          },
          "@ServerMajorVersion"
        ]
      },
      "probes": [
        "CompatibilityLevel",
        "SQLServerVersion"
      ]
    },
    {
      "id": [
        "DefaultRuleset"
      ],
      "itemType": "override",
      "targetFilter": {
        "type": "Database",
        "name": [
          "virtualmanagerdb",
          "scspfdb",
          "semanticsdb",
          "servicemanager",
          "service manager",
          "dwstagingandconfig",
          "dwrepository",
          "dwdatamart",
          "dwasdatabase",
          "omdwdatamart",
          "cmdwdatamart",
          "ssodb",
          "bamanalysis",
          "bamarchive",
          "bamalertsapplication",
          "bamalertsnsmain",
          "bamprimaryimport",
          "bamstarschema",
          "biztalkmgmtdb",
          "biztalkmsgboxdb",
          "biztalkdtadb",
          "biztalkruleenginedb",
          "bamprimaryimport",
          "biztalkedidb",
          "biztalkhwsdb",
          "tpm",
          "biztalkanalysisdb",
          "bamprimaryimportsuccessfully",
          "aspstate",
          "aspnet",
          "mscrm_config",
          "cpsdyn",
          "lcslog",
          "lcscdr",
          "lis",
          "lyss",
          "mgc",
          "qoemetrics",
          "rgsconfig",
          "rgsdyn",
          "rtc",
          "rtcab",
          "rtcab1",
          "rtcdyn",
          "rtcshared",
          "rtcxds",
          "xds",
          "activitylog",
          "branchdb",
          "clienttracelog",
          "eventlog",
          "listingssettings",
          "servicegroupdb",
          "tservercontroller",
          "vodbackend",
          "operationsmanager",
          "operationsmanagerdw",
          "operationsmanagerac",
          "orchestrator",
          "sso",
          "wss_search",
          "wss_search_config",
          "sharedservices_db",
          "sharedservices_search_db",
          "wss_content",
          "profiledb",
          "social db",
          "sync db",
          "susdb",
          "projectserver_archive",
          "projectserver_draft",
          "projectserver_published",
          "projectserver_reporting",
          "reportserver",
          "reportservertempdb",
          "rsdb",
          "rstempdb",
          "fastsearchadmindatabase",
          "ppsmonitoring",
          "ppsplanningservice",
          "ppsplanningsystem",
          "dynamics",
          "microsoftdynamicsax",
          "microsoftdynamicsaxbaseline",
          "fimservice",
          "fimsynchronizationservice",
          "sbgatewaydatabase",
          "sbmanagementdb",
          "wfinstancemanagementdb",
          "wfmanagementdb",
          "wfresourcemanagementdb"
        ]
      },
      "enabled": false
    },
    {
      "id": "PendingDiskIORequests",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "IO",
        "Performance"
      ],
      "displayName": "Pending disk I/O requests",
      "description": "A database management system (DBMS), such as SQL Server, relies on the timeliness of file input and output (I/O) operations. The proper configuration and maintenance of the I/O subsystem is critical to a successful SQL Server deployment.",
      "message": "Investigate and solve I/O related issues to get rid of pending requests",
      "helpLink": "https://support.microsoft.com/en-sg/help/897284/diagnostics-in-sql-server-help-detect-stalled-and-stuck-i-o-operations",
      "level": "Warning",
      "probes": [
        {
          "id": "PendingIORequests",
          "params": {
            "io_type": "disk"
          }
        }
      ]
    },
    {
      "id": "MaxDOP",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "engineEdition": "OnPremises",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "MaxDOP",
        "Performance",
        "Configuration",
        "NUMA",
        "CPU"
      ],
      "displayName": "MaxDOP should be less or equal number of CPUs",
      "description": "The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.",
      "message": "Update MaxDOP configuration option value: @{max_dop}. It shouldn't exceed @{online_logical_processors} - the number of processors that SQL Server uses",
      "helpLink": "https://support.microsoft.com/kb/2806535",
      "level": "Warning",
      "condition": {
        "le": [
          "@max_dop",
          "@online_logical_processors"
        ]
      },
      "probes": [
        "ServerInstanceConfiguration",
        "SysConfiguration"
      ]
    },
    {
      "id": "MaxDOPFewNUMA",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "engineEdition": "OnPremises",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0, 13.0)"
      },
      "tags": [
        "DefaultRuleset",
        "MaxDOP",
        "Performance",
        "Configuration",
        "NUMA",
        "CPU"
      ],
      "displayName": "MAXDOP set in accordance to CPU count",
      "description": "The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.",
      "message": "Update MAXDOP configuration option value: @{max_dop} – it shouldn't exceed the number of logical processors per NUMA node",
      "helpLink": "https://support.microsoft.com/kb/2806535",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "le": [
              "@numa_nodes",
              1
            ]
          },
          {
            "or": [
              {
                "ge": [
                  {
                    "ceiling": {
                      "div": [
                        "@total_logical_processors",
                        "@numa_nodes"
                      ]
                    }
                  },
                  8
                ]
              },
              {
                "le": [
                  "@max_dop",
                  {
                    "ceiling": {
                      "div": [
                        "@total_logical_processors",
                        "@numa_nodes"
                      ]
                    }
                  }
                ]
              }
            ]
          }
        ]
      },
      "probes": [
        "ServerInstanceConfiguration",
        "SysConfiguration"
      ]
    },
    {
      "id": "DbIntegrity",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": "tempdb"
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBCC",
        "Performance",
        "DataIntegrity"
      ],
      "displayName": "Database Integrity Checks",
      "description": "The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. This statement is used to perform different operations in your database and can be broken down into four categories: Maintenance, Miscellaneous, Informational, and Validation.",
      "message": "Run DBCC CHECKDB since integrity checks have not been executed for over 7 days",
      "helpLink": "https://msdn.microsoft.com/library/ms176064.aspx",
      "level": "Warning",
      "condition": [
        {
          "@IsReadOnly": true
        },
        {
          "ne": [
            "@DbState",
            0
          ]
        },
        {
          "le": [
            "@LastKnownDBCCDaysAgo",
            7
          ]
        }
      ],
      "probes": [
        "DBMetaInfo",
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "DirectCatalogUpdates",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": "tempdb"
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBCC",
        "Deprecated"
      ],
      "displayName": "Direct Catalog Updates",
      "description": "'allow updates' option is still present in the sp_configure stored procedure, although its functionality is unavailable in SQL Server. The setting has no effect. Starting with SQL Server 2005, direct updates to the system tables are not supported.",
      "message": "Do not use direct catalog update feature in new development work, and modify applications that currently use it as soon as possible",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/allow-updates-server-configuration-option",
      "level": "Warning",
      "condition": [
        {
          "@IsReadOnly": true
        },
        {
          "ne": [
            "@DbState",
            0
          ]
        },
        {
          "@UpdSysCatalog": 0
        }
      ],
      "probes": [
        "DBMetaInfo",
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "DataPurityCheck",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "DBCC",
        "DataIntegrity"
      ],
      "displayName": "Data Purity Check",
      "description": "The DBCC CHECKDB command checks the integrity of the objects in a database and should be run on a regular basis. One thing that this command does not check in databases created in versions prior to SQL Server 2005 is the integrity of the data in the columns until it has been run once with the DATA_PURITY option. Adding the DATA_PURITY option causes the CHECKDB command to look for column values that are invalid or out of range. Any database that was created in SQL Server 2005 or later will include the DATA_PURITY check by default; but if the database is being upgraded from an earlier version, you must run the command with the DATA_PURITY option at least once using the following command and then fix any data issues.",
      "message": "Run DBCC CHECKDB ([DatabaseName]) WITH DATA_PURITY",
      "helpLink": "http://support.microsoft.com/kb/923247",
      "level": "Warning",
      "condition": [
        {
          "@IsReadOnly": true
        },
        {
          "ne": [
            "@DbState",
            0
          ]
        },
        {
          "gt": [
            "@CreateVersion",
            611
          ]
        },
        {
          "ne": [
            "@DBCCFlags",
            0
          ]
        }
      ],
      "probes": [
        "DBMetaInfo",
        "DatabaseConfiguration"
      ]
    },
    {
      "id": "StatSamplingRate",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Statistics"
      ],
      "displayName": "Statistics sampling rate",
      "description": "For most queries, the Query Optimizer already generates the necessary statistics for a high quality query plan; in some cases, you need to create additional statistics or modify the query design for best results.",
      "message": "Some statistics have sampling rates less than @{threshold:P}, consider updating with a larger sample or full scan if key is not uniformly distributed. Affected tables: @{FullName}",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/update-statistics-transact-sql",
      "level": "Warning",
      "threshold": 0.25,
      "probes": [
        {
          "id": "StatSamplingRate",
          "params": {
            "threshold": "@threshold"
          },
          "transform": {
            "type": "aggregate",
            "map": {
              "FullName": "join"
            }
          }
        }
      ]
    },
    {
      "id": "IndexFragmentation",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Index",
        "Performance"
      ],
      "displayName": "Index Fragmentation",
      "description": "The SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Over time these modifications can cause the information in the index to become scattered in the database (fragmented). Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations.",
      "message": "Remove fragmentation of index @{IndexFullName}. It's fragmentation level: @{fragmentation:#0.##}%",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/indexes/reorganize-and-rebuild-indexes",
      "level": "Warning",
      "condition": [
        {
          "le": [
            "@fragmentation",
            "@threshold"
          ]
        },
        {
          "le": [
            "@page_count",
            8
          ]
        }
      ],
      "threshold": 5,
      "probes": [
        "IndexStatistics"
      ]
    },
    {
      "id": "IndexFragmentation",
      "itemType": "override",
      "targetFilter": {
        "version": "[12.0,)"
      },
      "condition": {
        "and": [
          {
            "or": [
              {
                "le": [
                  "@fragmentation",
                  "@threshold"
                ]
              },
              {
                "le": [
                  "@page_count",
                  8
                ]
              }
            ]
          },
          {
            "or": [
              {
                "not": {
                  "in": [
                    "@IndexType",
                    [
                      5,
                      6
                    ]
                  ]
                }
              },
              {
                "le": [
                  "@fragmentation_CI",
                  "@threshold"
                ]
              },
              {
                "ne": [
                  "@state",
                  3
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "id": "XTPHashAvgChainBuckets",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[12.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Index",
        "Performance",
        "XTP"
      ],
      "displayName": "High avg chain length and empty buckets",
      "description": "Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You should specify a value for the BUCKET_COUNT parameter when you create a memory-optimized table.",
      "message": "Index @{IndexFullName} has @{avg_chain_length} average chain length and @{EmptyBucketPct}% empty buckets count. Verify if there are many rows with duplicate index key values or there is a skew in the key values",
      "helpLink": "https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725",
      "level": "Warning",
      "condition": [
        {
          "le": [
            "@EmptyBucketPct",
            "@EmptyBucketsPctThreshold"
          ]
        },
        {
          "le": [
            "@avg_chain_length",
            5
          ]
        }
      ],
      "EmptyBucketsPctThreshold": 50,
      "probes": [
        "XTPIndexHashStatistics"
      ]
    },
    {
      "id": "XTPTooManyBuckets",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[12.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Index",
        "Performance",
        "XTP"
      ],
      "displayName": "Too many buckets",
      "description": "Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.",
      "message": "Make number of buckets of index @{IndexFullName} equal to distinct rows. It has @{total_bucket_count} buckets, and there are @{DistinctCnt} in the table, which is wasting memory and marginally slowing down full table scans",
      "helpLink": "https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725",
      "level": "Warning",
      "condition": [
        {
          "le": [
            "@total_bucket_count",
            "@DistinctCnt"
          ]
        }
      ],
      "probes": [
        "XTPIndexHashStatistics"
      ]
    },
    {
      "id": "XTPTooFewBuckets",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[12.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Index",
        "Performance",
        "XTP"
      ],
      "displayName": "Too few buckets",
      "description": "Memory-optimized HASH indexes behave different from NONCLUSTERED indexes. They are optimized for point-lookup operations, and do not support ordered scans or inequality seek operations. You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table.",
      "message": "Make number of buckets of index @{IndexFullName} equal to distinct rows. It has @{total_bucket_count} buckets, and there are @{DistinctCnt} in the table, which leads to chaining records",
      "helpLink": "https://techcommunity.microsoft.com/t5/sql-server/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/ba-p/385725",
      "level": "Warning",
      "condition": [
        {
          "ge": [
            "@total_bucket_count",
            "@DistinctCnt"
          ]
        }
      ],
      "probes": [
        "XTPIndexHashStatistics"
      ]
    },
    {
      "id": "XTPRangeIXHealth",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[12.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Index",
        "Performance",
        "XTP"
      ],
      "displayName": "NonClustered index retry amount",
      "description": "When a database with a memory-optimized table is restarted, the index is built by inserting one row at a time into memory. The count of page splits, merges, and consolidation can help you understand the work done to build the index when a database is brought online. Large numbers of retries are indicative of concurrency issues.",
      "message": "Review index @{IndexFullName} as its retry count is over @{RetryCountPct}% of total, which is indicating possible concurrency issues",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-db-xtp-nonclustered-index-stats-transact-sql",
      "level": "Warning",
      "condition": {
        "and": [
          {
            "le": [
              "@page_update_count_pct",
              "@RetryCountPct"
            ]
          },
          {
            "le": [
              "@page_consolidation_count_pct",
              "@RetryCountPct"
            ]
          },
          {
            "le": [
              "@page_split_count_pct",
              "@RetryCountPct"
            ]
          },
          {
            "le": [
              "@key_split_count_pct",
              "@RetryCountPct"
            ]
          },
          {
            "le": [
              "@page_merge_count_pct",
              "@RetryCountPct"
            ]
          },
          {
            "le": [
              "@key_merge_count_pct",
              "@RetryCountPct"
            ]
          }
        ]
      },
      "RetryCountPct": 5,
      "probes": [
        "XTPNonClusteredIndexHashStatistics"
      ]
    },
    {
      "id": "TF6533Misuse",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "version": "[11.0.6020, 11.0.6518)",
        "platform": "Windows",
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises"
      },
      "tags": [
        "DefaultRuleset",
        "TraceFlag",
        "Performance",
        "TF6533"
      ],
      "displayName": "STRelate and STAsBinary functions unexpected results due to enabled TF 6533",
      "description": "The STRelate and STAsBinary functions may return unexpected results when trace flag 6533 is enabled. Do not use this trace flag if your workload involves either of these functions.",
      "message": "Disable TF 6533 to avoid unexpected results of functions STRelate and STAsBinary",
      "helpLink": "https://support.microsoft.com/help/3107399",
      "level": "Warning",
      "condition": [
        {
          "not": {
            "in": [
              6533,
              "@TraceFlag"
            ]
          }
        },
        {
          "@InUse": 0
        }
      ],
      "probes": [
        "EnabledGlobalTraceFlags",
        "TF6533SpatialFunctionsUsage"
      ]
    },
    {
      "id": "UntrustedConstraints",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "DataIntegrity"
      ],
      "displayName": "Untrusted Constraints",
      "description": "If you need to load a lot of data quickly, you can disable keys and constraints in order to improve performance. After the data load finishes, enable them again, and SQL Server will check them behind the scenes. This technique works best in large data warehouse environments where entire dimension tables might be reloaded from scratch every night. Disabling constraints is usually safer and easier than dropping and recreating them.",
      "message": "Execute ALTER TABLE <table name> WITH CHECK CHECK CONSTRAINT <constraint name> statement to avoid possible performance issues: @{constraint_name} constraints are not trusted for referential integrity",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/alter-table-transact-sql",
      "level": "Warning",
      "probes": [
        "FKNotTrusted"
      ]
    },
    {
      "id": "PercentAutogrows",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "name": {
          "not": [
            "master",
            "model",
            "msdb",
            "tempdb"
          ]
        },
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "DBFileConfiguration",
        "DBConfiguration"
      ],
      "displayName": "Database files have a growth ratio set in percentage",
      "description": "Some database files have a growth ratio set in percentage. Over time, this could lead to uncontrolled disk space allocation and extended time to perform these growths",
      "message": "Don't use \"File Growth In Percent\" for the Autogrowth setting. The following files are affected: @{fileName} have a growth ratio set in percentage",
      "helpLink": "https://docs.microsoft.com/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options",
      "level": "Warning",
      "probes": [
        {
          "id": "DatabaseMasterFiles",
          "params": {
            "type": null,
            "is_percent_growth": 1
          },
          "transform": {
            "type": "aggregate",
            "map": {
              "fileName": "join"
            }
          }
        }
      ]
    },
    {
      "id": "StatsUpdate",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Statistics",
        "QueryOptimizer"
      ],
      "displayName": "Statistics need to be updated",
      "description": "The Query Optimizer determines whether an index is useful for a specific query by evaluating the stored statistics. If the statistics become out of date and significant changes have occurred against the underlying data, this can result in less than optimal query performance. In most cases, it's best to let SQL Server maintain the statistics. If you turn 'Auto Create Stats' and 'Auto Update Stats' off, then it is up to you to keep the statistics up-to-date somehow. Failure to do so will lead to poor query performance. Most applications should have these options ON. When the Auto Update Statistics setting is ON, the Query Optimizer updates statistics when they are used by a query and when they might be out-of-date. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The Query Optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view. The Query Optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the Query Optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics. The AUTO_UPDATE_STATISTICS option applies to statistics created for indexes, single-columns in query predicates, and statistics that are created by using the CREATE STATISTICS statement. This option also applies to filtered statistics.",
      "message": "Update stats in table @{TableName} to improve query performance",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/statistics/statistics#UpdateStatistics",
      "condition": [
        "@is_auto_update_stats_on",
        {
          "and": [
            {
              "or": [
                {
                  "gt": [
                    "@rows",
                    "@threshold"
                  ]
                },
                {
                  "lt": [
                    "@modification_counter",
                    "@threshold"
                  ]
                }
              ]
            },
            {
              "or": [
                {
                  "le": [
                    "@rows",
                    "@threshold"
                  ]
                },
                {
                  "lt": [
                    "@modification_counter",
                    {
                      "add": [
                        "@threshold",
                        {
                          "mul": [
                            "@rows",
                            0.2
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ],
      "threshold": 500,
      "probes": [
        "DatabaseConfiguration",
        "ObjectStatistics"
      ]
    },
    {
      "id": "AdHocQueriesOff",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Security"
      ],
      "displayName": "Option 'ad hoc distributed queries' should be disabled",
      "description": "Ad Hoc Distributed Queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server. Enabling the use of ad hoc names means that any authenticated login to SQL Server can access the provider. SQL Server administrators should enable this feature for providers that are safe to be accessed by any local login.",
      "message": "Disable 'ad hoc distributed queries' option",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/ad-hoc-distributed-queries-server-configuration-option",
      "level": "Warning",
      "condition": {
        "not": "@ad_hoc_distributed_queries"
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "AffinityMasksOverlap",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance"
      ],
      "displayName": "Affinity Mask and Affinity I/O Mask overlapping",
      "description": "Enabling a CPU with both the affinity mask and the affinity I/O mask can slow performance by forcing the processor to be overused. When specified either the affinity mask or the affinity I/O mask options they must both be specified, but only enables each CPU no more than once. The same CPU should not be enabled in both the affinity mask option and the affinity I/O mask option. The bits that correspond to each CPU should be in one of the following states.",
      "message": "Correct Affinity Mask and Affinity IO Mask overlap. AffinityMask = @{affinity_mask}, Affinity64Mask = @{affinity64_mask}, AffinityIOMask = @{affinity_io_mask}, Affinity64IOMask = @{affinity64_io_mask}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/policy-based-management/correct-affinity-mask-and-affinity-input-and-output-mask-overlap",
      "level": "Warning",
      "condition": {
        "and": [
          {
            "eq": [
              {
                "bitand": [
                  "@affinity_mask",
                  "@affinity_io_mask"
                ]
              },
              0
            ]
          },
          {
            "eq": [
              {
                "bitand": [
                  "@affinity64_mask",
                  "@affinity64_io_mask"
                ]
              },
              0
            ]
          }
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "AutoSoftNUMAOn",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[13.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "NUMA"
      ],
      "displayName": "Auto Soft NUMA should be enabled",
      "description": "Modern processors have multiple cores per socket. Each socket is represented, usually, as a single NUMA node. The SQL Server database engine partitions various internal structures and partitions service threads per NUMA node. With processors containing 10 or more cores per socket, using software NUMA to split hardware NUMA nodes generally increases scalability and performance. Prior to SQL Server 2014 (12.x) SP2, software-based NUMA (soft-NUMA) has required to edit the registry to add a node configuration affinity mask, and was configured at the host level, rather than per instance. Soft-NUMA has configured automatically at the database-instance level when the SQL Server Database Engine service starts.",
      "message": "Enable 'automatic soft-NUMA disabled' option. There's a possibly inefficient allocation of cores between the NUMA-nodes",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/soft-numa-sql-server",
      "level": "Warning",
      "condition": {
        "not": "@automatic_soft_NUMA_disabled"
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "BlockingChains",
      "itemType": "definition",
      "target": {
        "type": "Database",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Statistics"
      ],
      "displayName": "Blocking chains",
      "description": "Blocking chains of sessions can cause poor performance when the duration of locks is too long on the resource.",
      "message": "Review locking strategy. @{blocked_spid} process(es) have been blocked@{block_time_min: for more than #0 min;;''}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-os-waiting-tasks-transact-sql",
      "level": "Warning",
      "condition": {
        "not": "@blocked_spid"
      },
      "probes": [
        {
          "id": "ProcessBlockingChains",
          "params": {
            "waitThreshold": 5
          },
          "transform": {
            "type": "aggregate",
            "map": {
              "blocked_spid": "count",
              "block_time_min": "min"
            }
          }
        }
      ]
    },
    {
      "id": "BlockProcThreshNotRecommend",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Blocked Process Threshold is set to recommended value",
      "description": "This rule checks that the blocked process threshold option is set to 0 (disabled) or set to a value higher than or equal to 5 (seconds). Setting the blocked process threshold option to a value from 1 to 4 can cause the deadlock monitor to run constantly. Values 1 to 4 should only be used for troubleshooting, and never long term or in a production environment without the assistance of Microsoft Customer Service and Support.",
      "message": "Increase or Disable Blocked Process Threshold. Its current value is @{block_threshold}",
      "helpLink": "https://docs.microsoft.com/sql/relational-databases/policy-based-management/increase-or-disable-blocked-process-threshold",
      "level": "Warning",
      "threshold": 5,
      "condition": {
        "or": [
          {
            "le": [
              "@block_threshold",
              0
            ]
          },
          {
            "ge": [
              "@block_threshold",
              "@threshold"
            ]
          }
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "CrossDBOwnershipOff",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Security"
      ],
      "displayName": "Option 'cross db ownership chaining' should be disabled",
      "description": "Cross-database ownership chaining occurs when a procedure in one database depends on objects in another database. A cross-database ownership chain works in the same way as ownership chaining within a single database, except that an unbroken ownership chain requires that all the object owners are mapped to the same login account. If the source object in the source database and the target objects in the target databases are owned by the same login account, SQL Server does not check permissions on the target objects. Ownership chaining across databases is turned off by default. Microsoft recommends that you disable cross-database ownership chaining because it exposes you to some security risks.",
      "message": "Disable 'cross db ownership chaining' option",
      "helpLink": "https://docs.microsoft.com/dotnet/framework/data/adonet/sql/enabling-cross-database-access-in-sql-server",
      "level": "Warning",
      "condition": {
        "not": "@cross_db_ownership_chaining"
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "DefaultTraceOff",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Default trace enabled",
      "description": "Use the 'default trace enabled' option to enable or disable the default trace log files. The default trace functionality provides a rich, persistent log of activity and changes primarily related to the configuration options. ",
      "message": "Enable option 'default trace enabled', it provides troubleshooting assistance to database administrators",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/default-trace-enabled-server-configuration-option",
      "level": "Warning",
      "condition": "@default_trace_enabled",
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "DiskPartitionAlignment",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Storage"
      ],
      "displayName": "Disk Partition alignment",
      "description": "Noncompliance with storage configuration best practices for the Microsoft SQL Server database software is a common root cause of support cases. The reason is often shown to be misalignment between Windows, storage, disk controllers, and cache segment lines. 64 KB is a common, valid starting partition offset because it correlates well with fundamental physical boundaries in disks, controllers, and cache. Other valid starting partition offsets exist.",
      "message": "Increase disk partition alignment on @{Output.Name} to make it 64 KB at least. Current volume offset is @{Output.StartingOffset}",
      "helpLink": "https://docs.microsoft.com/previous-versions/sql/sql-server-2008/dd758814(v=sql.100)",
      "level": "Warning",
      "Threshold": 65536,
      "probes": [
        {
          "id": "MisalignedDiskPartition",
          "params": {
            "threshold": "@Threshold"
          }
        }
      ]
    },
    {
      "id": "FullTextServiceLoadOSResources",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Full-text search option 'load_os_resources' set to default",
      "description": "Full-text search option 'load_os_resources' indicates whether operating system word breakers, stemmers, and filters are registered and used with this instance of SQL Server. By default, this property is disabled to prevent inadvertent behavior changes by updates made to the operating system. Enabling use of operating system resources provides access to resources for languages and document types registered with Microsoft Indexing Service that do not have an instance-specific resource installed. If you enable the loading of operating system resources, ensure that the operating system resources are trusted signed binaries; otherwise, they cannot be loaded when verify_signature (see below) is set to 1.",
      "message": "Set FTS option 'load_os_resources' to @{defaultLoadOSResources}",
      "level": "Warning",
      "defaultLoadOSResources": 0,
      "condition": {
        "or": [
          {
            "eq": [
              "@IsFulltextInstalled",
              0
            ]
          },
          {
            "eq": [
              "@LoadOSResources",
              "@defaultLoadOSResources"
            ]
          }
        ]
      },
      "probes": [
        "FullTextServiceInfo"
      ]
    },
    {
      "id": "FullTextServiceVerifySignature",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises, ManagedInstance",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Security"
      ],
      "displayName": "Full-text search option 'verify_signature' set to default",
      "description": "Full-text search option 'verify_signature' indicates whether only signed binaries are loaded by the Full-Text Engine. By default, only trusted, signed binaries are loaded.",
      "message": "Set FTS option 'load_os_resources' to @{defaultVerifySignature}",
      "level": "Warning",
      "defaultVerifySignature": 1,
      "condition": {
        "or": [
          {
            "eq": [
              "@IsFulltextInstalled",
              0
            ]
          },
          {
            "eq": [
              "@VerifySignature",
              "@defaultVerifySignature"
            ]
          }
        ]
      },
      "probes": [
        "FullTextServiceInfo"
      ]
    },
    {
      "id": "HPLogicalProcessor",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance"
      ],
      "displayName": "HP Logical Processor issue",
      "description": "HP ProLiant Gen9 servers configured with Intel Xeon E5 2600 v3 processors can be configured to support processor configurations that exceed 64 logical processors. Windows Operating Systems divide the logical processors into groups (Kgroups). On HP ProLiant Gen9 servers, the System Firmware, by default, reports the maximum number of possible logical processors to reflect the highest core count processor available. The result is that Windows Operating Systems will group the available logical processors into more than one Kgroup in a two-socket populated configuration. Applications that rely on older kernel APIs for affnitizing threads inside a process to a specific logical processor will only be able to address one Kgroup. The result is that the process will run on fewer logical processors than are presented to the OS for use. Workloads that utilize multiple processes (in lieu of a single process with multiple threads), or are leveraging the APIs that allow beyond single Kgroup addressing, will have full access to all the logical processors presented to the OS for use.",
      "message": "Consider updating server BIOS to the latest version. It may be affected by the HP Logical Processor issue. ",
      "helpLink": "https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04650594",
      "level": "Warning",
      "condition": {
        "gt": [
          "@virtual_machine_type",
          0
        ]
      },
      "probes": [
        "SysDmOsSysInfo",
        {
          "id": "ServerBIOSInfo",
          "transform": {
            "type": "parse",
            "map": {
              "BIOSVendor": "/^(HP|Hewlett-Packard)$/ix"
            }
          }
        },
        {
          "id": "ServerCPUInfo",
          "transform": [
            {
              "type": "parse",
              "map": {
                "ProcessorNameString": "/.*XEON.*E5.*/ix"
              }
            },
            {
              "type": "aggregate",
              "map": {
                "ProcessorNameString": "count"
              }
            }
          ]
        }
      ]
    },
    {
      "id": "IndexCreateMemory",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "IndexCreateMemory"
      ],
      "displayName": "Option 'index create memory' value should be greater 'min memory per query'",
      "description": "The 'index create memory' option controls the maximum amount of memory initially allocated for sort operations when creating indexes. The default value for this option is 0 (self-configuring). If more memory is later needed for index creation and the memory is available, the server will use it; thereby, exceeding the setting of this option. If additional memory is not available, the index creation will continue using the memory already allocated. However, if you experience difficulties creating indexes, consider increasing the value of this option from its run value.",
      "message": "Set option 'index create memory' to default value 0 or make it greater than value of 'min memory per query'. Current 'index create memory' is @{index_create_memory} KB, current 'min memory per query' is @{min_memory_per_query} KB",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-index-create-memory-server-configuration-option",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "not": "@index_create_memory"
          },
          {
            "ge": [
              "@index_create_memory",
              "@min_memory_per_query"
            ]
          }
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "LightweightPoolingOn",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance"
      ],
      "displayName": "Lightweight pooling option disabled",
      "description": "The 'lightweight pooling' option is used to configure SQL Server to use simplified flows (or 'fibers'). Fiber mode is intended for certain situations in which the context switching of the UMS workers are the critical bottleneck in performance. Because this is rare, fiber mode rarely enhances performance or scalability on the typical system. Improved context switching in Microsoft Windows Server 2003 has also reduced the need for fiber mode. We do not recommend that you use fiber mode scheduling for routine operation. This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server that use Thread Local Storage (TLS) or thread-owned objects, such as mutexes (a type of Win32 kernel object), cannot function correctly in fiber mode.",
      "message": "Disable option 'lightweight pooling' as fiber mode scheduling can decrease performance",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/lightweight-pooling-server-configuration-option",
      "level": "Warning",
      "condition": {
        "not": "@lightweight_pooling"
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "LocksOptionNotDefault",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance"
      ],
      "displayName": "Option 'locks' should be set to default",
      "description": "The 'locks' option sets the maximum number of available locks, thereby limiting the amount of memory the SQL Server Database Engine uses for them. The default setting is 0, which allows the Database Engine to allocate and deallocate lock structures dynamically, based on changing system requirements.",
      "message": "Set option 'locks' to @{recommended_max_lock_number}, its current value is @{locks}",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-locks-server-configuration-option",
      "level": "Warning",
      "recommended_max_lock_number": 0,
      "condition": {
        "eq": [
          "@locks",
          "@recommended_max_lock_number"
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "MaxDOP1NUMA",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "engineEdition": "OnPremises",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "MaxDOP",
        "Performance",
        "Configuration",
        "NUMA",
        "CPU"
      ],
      "displayName": "MAXDOP set in accordance to CPU count",
      "description": "The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.",
      "message": "Update MAXDOP option according to guideline (see help link). Current MAXDOP value is @{max_dop}, CPU count is @{online_logical_processors}",
      "helpLink": "https://support.microsoft.com/kb/2806535",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "ne": [
              "@numa_nodes",
              1
            ]
          },
          {
            "and": [
              {
                "or": [
                  {
                    "le": [
                      "@online_logical_processors",
                      8
                    ]
                  },
                  {
                    "eq": [
                      "@max_dop",
                      8
                    ]
                  }
                ]
              },
              {
                "or": [
                  {
                    "gt": [
                      "@online_logical_processors",
                      8
                    ]
                  },
                  {
                    "or": [
                      {
                        "eq": [
                          "@max_dop",
                          "@online_logical_processors"
                        ]
                      },
                      {
                        "eq": [
                          "@max_dop",
                          0
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      "probes": [
        "ServerInstanceConfiguration",
        "SysConfiguration"
      ]
    },
    {
      "id": "MaxDopFewNumaLess15",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "engineEdition": "OnPremises",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[13.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "MaxDOP",
        "Performance",
        "Configuration",
        "NUMA",
        "CPU"
      ],
      "displayName": "MAXDOP set in accordance to CPU count",
      "description": "The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.",
      "message": "Update MaxDOP configuration option value: @{max_dop} – it shouldn't exceed the number of logical processors per NUMA node",
      "helpLink": "https://support.microsoft.com/kb/2806535",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "le": [
              "@numa_nodes",
              1
            ]
          },
          {
            "or": [
              {
                "gt": [
                  {
                    "ceiling": {
                      "div": [
                        "@total_logical_processors",
                        "@numa_nodes"
                      ]
                    }
                  },
                  15
                ]
              },
              {
                "lt": [
                  "@max_dop",
                  {
                    "ceiling": {
                      "div": [
                        "@total_logical_processors",
                        "@numa_nodes"
                      ]
                    }
                  }
                ]
              }
            ]
          }
        ]
      },
      "probes": [
        "ServerInstanceConfiguration",
        "SysConfiguration"
      ]
    },
    {
      "id": "MaxDopFewNumaOver15",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "engineEdition": "OnPremises",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[13.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "MaxDOP",
        "Performance",
        "Configuration",
        "NUMA",
        "CPU"
      ],
      "displayName": "MAXDOP set in accordance to CPU count",
      "description": "The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.",
      "message": "Update MAXDOP configuration option value: @{max_dop} – it should be half the number of logical processors per NUMA node",
      "helpLink": "https://support.microsoft.com/kb/2806535",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "le": [
              "@numa_nodes",
              1
            ]
          },
          {
            "or": [
              {
                "le": [
                  {
                    "ceiling": {
                      "div": [
                        "@total_logical_processors",
                        "@numa_nodes"
                      ]
                    }
                  },
                  15
                ]
              },
              {
                "le": [
                  "@max_dop",
                  {
                    "div": [
                      {
                        "ceiling": {
                          "div": [
                            "@total_logical_processors",
                            "@numa_nodes"
                          ]
                        }
                      },
                      2
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      "probes": [
        "ServerInstanceConfiguration",
        "SysConfiguration"
      ]
    },
    {
      "id": "MaxDopFewNumaOver8",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "engineEdition": "OnPremises",
        "platform": [
          "Windows",
          "Linux"
        ],
        "version": "[11.0, 13.0)"
      },
      "tags": [
        "DefaultRuleset",
        "MaxDOP",
        "Performance",
        "Configuration",
        "NUMA",
        "CPU"
      ],
      "displayName": "MAXDOP set in accordance to CPU count",
      "description": "The Microsoft SQL Server max degree of parallelism (MAXDOP) configuration option controls the number of processors that are used for the execution of a query in a parallel plan. This option determines the number of threads that are used for the query plan operators that perform the work in parallel. Depending on whether SQL Server is set up on a symmetric multiprocessing (SMP) computer, a non-uniform memory access (NUMA) computer, or hyperthreading-enabled processors, the max degree of parallelism option should be configured appropriately.",
      "message": "Update MaxDOP configuration option value: @{max_dop} – it should equal to 8",
      "helpLink": "https://support.microsoft.com/kb/2806535",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "le": [
              "@numa_nodes",
              1
            ]
          },
          {
            "or": [
              {
                "lt": [
                  {
                    "ceiling": {
                      "div": [
                        "@total_logical_processors",
                        "@numa_nodes"
                      ]
                    }
                  },
                  8
                ]
              },
              {
                "le": [
                  "@max_dop",
                  8
                ]
              }
            ]
          }
        ]
      },
      "probes": [
        "ServerInstanceConfiguration",
        "SysConfiguration"
      ]
    },
    {
      "id": "MinMemoryPerQuery",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Memory",
        "Performance"
      ],
      "displayName": "Option 'min memory per query' set to default",
      "description": "The min memory per query option specifies the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. This is also known as the minimum memory grant. The default value is 1,024 KB. Do not set the min memory per query server configuration option too high, especially on very busy systems, because the query has to wait1 until it can secure the minimum memory requested, or until the value specified in the query wait server configuration option is exceeded. If more memory is available than the specified minimum value required to execute the query, the query is allowed to make use of the additional memory, provided that the memory can be used effectively by the query.",
      "message": "Set option 'min memory per query' to @{recommended_min_memory_per_query} KB, current value is '@{min_memory_per_query}'",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option",
      "level": "Warning",
      "recommended_min_memory_per_query": 1024,
      "condition": {
        "eq": [
          "@min_memory_per_query",
          "@recommended_min_memory_per_query"
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "NetworkPacketSize",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Network"
      ],
      "displayName": "Option 'network packet size' set to default",
      "description": "The 'network packet size' option sets the packet size (in bytes) that is used across the whole network. Packets are the fixed-size chunks of data that transfer requests and results between clients and servers. The default packet size is 4096 bytes.",
      "message": "Set option 'network packet size' to @{recommended_network_packet_size} bytes, current value is @{network_packet_size}",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-network-packet-size-server-configuration-option",
      "level": "Warning",
      "recommended_network_packet_size": 4096,
      "condition": {
        "eq": [
          "@network_packet_size",
          "@recommended_network_packet_size"
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "NtfsBlockSizeNotFormatted",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Configuration",
        "NTFS"
      ],
      "displayName": "NTFS block size in volumes that hold database files <> 64KB",
      "description": "A drive can be formatted with different sizes ranging from 512 bytes to 64K sizes with the default being 4KB (4096 bytes). This setting is also called as “Bytes Per Cluster”. The atomic unit of storage in SQL Server is a page which is 8KB in size. Extents are groups of eight 8 KB pages that are physically contiguous to each other for a total of 64 KB. SQL Server uses extents to store data. Hence, on a SQL Server machine the NTFS Allocation unit size hosting SQL database files (Including tempdb files) should be 64 KB.",
      "message": "Set allocation unit size on volume @{masterFilesVolumeName} to 64 KB. Current size is @{Output.BlockSize} bytes",
      "helpLink": "https://docs.microsoft.com/archive/blogs/docast/operating-system-best-practice-configurations-for-sql-server",
      "level": "Warning",
      "BlockSize": 65536,
      "condition": {
        "or": [
          {
            "ne": [
              "@masterFilesVolumeName",
              "@Output.Name"
            ]
          },
          {
            "eq": [
              "@Output.BlockSize",
              "@BlockSize"
            ]
          }
        ]
      },
      "probes": [
        "NtfsBlockSize",
        "Win32Volume"
      ]
    },
    {
      "id": "OleAutomationProceduresOn",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Security"
      ],
      "displayName": "Option 'Ole Automation Procedures' set to default",
      "description": "Use the 'Ole Automation Procedures' option to specify whether OLE Automation objects can be instantiated within Transact-SQL batches. When OLE Automation Procedures are enabled, a call to 'sp_OACreate' will start the OLE shared execution environment. The 'Ole Automation Procedures' option can be set to the following values: 1 Enabled, 0 Disabled (default value).",
      "message": "Disable option 'Ole Automation Procedures' option, it exposes to security risks",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option",
      "level": "Warning",
      "condition": {
        "not": "@ole_automation_procedures"
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "PageFileAutoManaged",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Memory",
        "PageFile",
        "SysAdminReq"
      ],
      "displayName": "Page file is not automatically managed",
      "description": "Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth.",
      "message": "Avoid automatic management of page files, set custom sizes for page files on drives: '@{PagingFiles.Drive}'",
      "helpLink": "https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth",
      "level": "Warning",
      "probes": [
        {
          "id": "PageFileManagement",
          "transform": [
            {
              "type": "parse",
              "map": {
                "PagingFiles": "/^(?<Drive>\\w:)\\\\pagefile.sys 0 0$/x"
              }
            },
            {
              "type": "aggregate",
              "map": {
                "PagingFiles.Drive": "join"
              }
            }
          ]
        }
      ]
    },
    {
      "id": "PageFileAutoManagedAllDrives",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Memory",
        "PageFile",
        "SysAdminReq"
      ],
      "displayName": "Page file is not automatically managed",
      "description": "Memory allocation failures can occur due to latencies that are associated with growing the size of a page file to support additional memory requirements in the system. A potential cause of these failures is when the page file size is configured as “automatic.” Automatic page-file size starts with a small page file and grows automatically as needed. The IO system consists of many components, including file system filters, file systems, volume filters, storage filters, and so on. The specific components on a given system can cause variability in page file growth. ",
      "message": "Disable option 'Automatically manage paging file size for all drives'",
      "helpLink": "https://support.microsoft.com/help/4055223/memory-allocation-errors-can-be-caused-by-slow-page-file-growth",
      "level": "Warning",
      "condition": {
        "ne": [
          "@PagingFiles",
          "?:\\pagefile.sys"
        ]
      },
      "probes": [
        "PageFileManagement"
      ]
    },
    {
      "id": "PageFileLess10FreeSpace",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Memory",
        "PageFile",
        "SysAdminReq"
      ],
      "displayName": "Insufficient page file free space",
      "description": "Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.",
      "message": "Revise page file settings. Less than 10% of page file is available",
      "helpLink": "https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size",
      "level": "Warning",
      "threshold": 0.1,
      "condition": {
        "or": [
          {
            "eq": [
              {
                "sub": [
                  "@total_page_file_kb",
                  "@total_physical_memory_kb"
                ]
              },
              0
            ]
          },
          {
            "gt": [
              {
                "div": [
                  {
                    "sub": [
                      "@available_page_file_kb",
                      "@available_physical_memory_kb"
                    ]
                  },
                  {
                    "sub": [
                      "@total_page_file_kb",
                      "@total_physical_memory_kb"
                    ]
                  }
                ]
              },
              "@threshold"
            ]
          }
        ]
      },
      "probes": [
        "OsSysMemory"
      ]
    },
    {
      "id": "PageFileNotConfigured",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Memory",
        "PageFile",
        "SysAdminReq"
      ],
      "displayName": "Page file configured",
      "description": "Page file sizing depends on the system crash dump setting requirements and the peak usage or expected peak usage of the system commit charge. Both considerations are unique to each system, even for systems that are identical. This means that page file sizing is also unique to each system and cannot be generalized.",
      "message": "Create a page file on server",
      "helpLink": "https://docs.microsoft.com/windows/client-management/determine-appropriate-page-file-size",
      "level": "Warning",
      "condition": "@PagingFiles",
      "probes": [
        "PageFileManagement"
      ]
    },
    {
      "id": "PageFileOut",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance",
        "Memory",
        "PageFile",
        "SysAdminReq"
      ],
      "displayName": "Memory paged out",
      "description": "Microsoft SQL Server performs dynamic memory management based on the memory requirements of the current load and activities on the system. On Windows, SQL Server can use the memory notification mechanisms that are provided by the QueryMemoryResourceNotification Windows API. Based on this information from the QueryMemoryResourceNotification Windows API or from the memory calculation, SQL Server responds to the current memory situation on a specific system. This provides the following benefits: 1. The system does not page out the working set of the SQL Server process; 2. The necessary database pages are available in memory to reduce physical I/O needs. For more information, see the \"Dynamic memory management\" topic and the \"Server memory options\" topic in SQL Server Books Online.",
      "message": "Revise LPIM settings. Part of SQL Server process memory has been paged out",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows",
      "level": "Warning",
      "condition": {
        "gt": [
          "@available_page_file_kb",
          0
        ]
      },
      "probes": [
        "OsSysMemory"
      ]
    },
    {
      "id": "PowerPlanSchemeNotRecommended",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance"
      ],
      "displayName": "Power plan is High Performance",
      "description": "In some cases you may experience degraded overall performance on a Windows Server 2008 R2 or later machine when running with the default (Balanced) power plan. The issue may occur irrespective of platform and may be exhibited on both native and virtual environments. The degraded performance may increase the average response time for some tasks and cause performance issues with CPU-intensive applications. Please note that you may not notice performance issues while performing simple operations. However, applications or scripts that intensively use resources (primarily processor and memory) may exhibit the problem. To work around the performance degradation issue, you can switch to the High Performance power plan.  However, this will disable dynamic performance scaling on the platform. Depending on the environment, if the platform is always under a heavy load, then this is a viable solution.",
      "message": "Switch server to High Performance power plan",
      "helpLink": "https://support.microsoft.com/help/2207548/slow-performance-on-windows-server-when-using-the-balanced-power-plan",
      "level": "Warning",
      "powerplanid": "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c",
      "condition": {
        "or": [
          {
            "eq": [
              "@ActivePowerScheme",
              0
            ]
          },
          {
            "eq": [
              "@ActivePowerScheme",
              "@powerplanid"
            ]
          }
        ]
      },
      "probes": [
        "PowerPlan"
      ]
    },
    {
      "id": "PriorityBoostOn",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance"
      ],
      "displayName": "Option 'priority boost' set to default",
      "description": "The 'priority boost' option used to specify whether Microsoft SQL Server should run at a higher scheduling priority than other processes on the same computer. If this option is set to 1, SQL Server runs at a priority base of '13' scheduler. The default is '0', which is a priority base of '7'.",
      "message": "Set 'priority boost' option to default value",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-priority-boost-server-configuration-option",
      "level": "Critical",
      "condition": {
        "not": "@priority_boost"
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "QueryWaitNotDefault",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Option 'query wait' set to default",
      "description": "Memory-intensive queries (such as those involving sorting and hashing) are queued when there is not enough memory available to run the query. The query wait option specifies the time, in seconds (from 0 through 2147483647), that a query waits for resources before it times out. The default value for this option is -1. This means the time-out is calculated as 25 times the estimated query cost.",
      "message": "Set option 'query wait' to @{default_query_wait}, current value is @{query_wait}. Increasing the maximum wait time may increase the amount of time for the query to be terminated",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-query-wait-server-configuration-option",
      "level": "Critical",
      "default_query_wait": -1,
      "condition": {
        "eq": [
          "@query_wait",
          "@default_query_wait"
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "RecoveryIntervalOn",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance"
      ],
      "displayName": "Option 'recovery interval' set to default",
      "description": "The 'recovery interval' option defines an upper limit on the time recovering a database should take. The default recovery-interval value is 0, which allows the Database Engine to automatically configure the recovery interval. Higher values indicate the approximate maximum recovery time, in minutes.",
      "message": "Set option 'recovery interval' to @{default_recovery_interval}, current value is @{recovery_interval}",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-recovery-interval-server-configuration-option",
      "level": "Warning",
      "default_recovery_interval": 0,
      "condition": {
        "eq": [
          "@recovery_interval",
          "@default_recovery_interval"
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "RemoteDacClusterOn",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Remote admin connections enabled on cluster (DAC)",
      "description": "SQL Server provides a dedicated administrator connection (DAC). The DAC lets an administrator access a running server to execute diagnostic functions or Transact-SQL statements, or to troubleshoot problems on the server, even when the server is locked or running in an abnormal state and not responding to a SQL Server Database Engine connection. On cluster configurations, the DAC will be off by default. Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. If SQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL Server to connect with the DAC. Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.",
      "message": "Enable 'remote admin connections' option",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/diagnostic-connection-for-database-administrators",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "not": "@is_clustered_server"
          },
          "@remote_admin_connections"
        ]
      },
      "probes": [
        "SysConfiguration",
        "IsClusteredServer"
      ]
    },
    {
      "id": "RemoteQueryTimeout",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Option 'remote query timeout' set to default",
      "description": "The 'remote query timeout' option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query.",
      "message": "Set option 'remote query timeout' to @{recommended_remote_query_timeout}, current value is @{remote_query_timeout}",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option",
      "level": "Warning",
      "recommended_remote_query_timeout": 600,
      "condition": {
        "eq": [
          "@remote_query_timeout",
          "@recommended_remote_query_timeout"
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "ScanStartupProcs",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Option 'scan for startup procs' disabled on replication servers",
      "description": "Use the scan for startup procs option to scan for automatic execution of stored procedures at SQL Server startup time. If this option is set to 1, SQL Server scans for and runs all automatically run stored procedures that are defined on the server. The default value for scan for startup procs is 0 (do not scan). This option shouldn't be enabled on a SQL Server participating in replication.",
      "message": "Disable option 'scan for startup procs' as this server participates in replication",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-scan-for-startup-procs-server-configuration-option",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "not": "@ReplicationInfo::IsInstalled"
          },
          {
            "not": "@startup_stored_procedures"
          }
        ]
      },
      "probes": [
        "ReplicationInfo",
        "SysConfiguration"
      ]
    },
    {
      "id": "ThreadExhaustionCPUBound",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance"
      ],
      "displayName": "Worker thread exhaustion on CPU-bound system",
      "description": "Consider overall runnable tasks count and schedulers work queue count.",
      "message": "Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Overall runnable tasks count is '@{overall_runnable_tasks_count}' (> 2), indicating the server might be CPU-bound. Configured workers is '@{max_workers_count}'",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "le": [
              "@schedulers_work_queue_count",
              1
            ]
          },
          {
            "le": [
              "@overall_runnable_tasks_count",
              2
            ]
          }
        ]
      },
      "probes": [
        "WorkerThreads",
        "SysDmOsSysInfo"
      ]
    },
    {
      "id": "ThreadExhaustionNotCPUBound",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Performance"
      ],
      "displayName": "Possible worker thread exhaustion on a not-CPU-bound system",
      "description": "Consider overall runnable tasks count and schedulers work queue count.",
      "message": "Possible worker thread exhaustion (schedulers work queue count is '@{schedulers_work_queue_count}'). Because the overall runnable tasks count is '@{overall_runnable_tasks_count}' (<= 2), indicating the server might not be CPU bound, there might be room to increase max_worker_threads (configured workers is '@{max_workers_count}')",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option",
      "level": "Warning",
      "condition": {
        "or": [
          {
            "le": [
              "@schedulers_work_queue_count",
              1
            ]
          },
          {
            "gt": [
              "@overall_runnable_tasks_count",
              2
            ]
          }
        ]
      },
      "probes": [
        "WorkerThreads",
        "SysDmOsSysInfo"
      ]
    },
    {
      "id": "ThresholdForParallelism",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance"
      ],
      "displayName": "Option 'cost threshold for parallelism' set to default",
      "description": "The 'cost threshold for parallelism' option specifies the threshold at which SQL Server creates and runs parallel plans for queries. SQL Server creates and runs a parallel plan for a query only when the estimated cost to run a serial plan for the same query is higher than the value set in the cost threshold for parallelism. The cost refers to an estimated cost required to run the serial plan on a specific hardware configuration and is not a unit of time. The 'cost threshold for parallelism' option can be set to any value from 0 through 32767. The default value is 5.",
      "message": "Set option 'cost threshold for parallelism' to @{default_cost_parallel}, current value is @{cost_threshold_for_parallelism}",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-cost-threshold-for-parallelism-server-configuration-option",
      "level": "Warning",
      "default_cost_parallel": 5,
      "condition": {
        "eq": [
          "@cost_threshold_for_parallelism",
          "@default_cost_parallel"
        ]
      },
      "probes": [
        "SysConfiguration"
      ]
    },
    {
      "id": "WorkerThreadsLargeX64",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance",
        "CPU"
      ],
      "displayName": "Option 'max worker threads' set to recommended value on x64 system",
      "description": "The max worker threads option configures the number of worker threads that are available to SQL Server processes. The default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.",
      "message": "Reconfigure option 'max worker threads' parameter. Its current value (@{max_worker_threads}) is higher than recommended for x64 system (@{recommended_max_worker_threads})",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option",
      "level": "Warning",
      "recommended_max_worker_threads": 2048,
      "condition": {
        "or": [
          {
            "ne": [
              "@host_architecture",
              64
            ]
          },
          {
            "lt": [
              "@max_worker_threads",
              "@recommended_max_worker_threads"
            ]
          }
        ]
      },
      "probes": [
        "SysDmOsHostInfo",
        "SysConfiguration"
      ]
    },
    {
      "id": "WorkerThreadsLargeX86",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": "Windows",
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration",
        "Performance",
        "CPU"
      ],
      "displayName": "Option 'max worker threads' set to recommended value on x86 system",
      "description": "The max worker threads option configures the number of worker threads that are available to SQL Server processes. he default value for max worker threads is 0. This enables SQL Server to automatically configure the number of worker threads at startup.",
      "message": "Reconfigure option 'max worker threads' parameter. Its current value (@{max_worker_threads}) is higher than recommended for x86 system (@{recommended_max_worker_threads})",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/configure-the-max-worker-threads-server-configuration-option",
      "level": "Warning",
      "recommended_max_worker_threads": 1024,
      "condition": {
        "or": [
          {
            "ne": [
              "@host_architecture",
              32
            ]
          },
          {
            "lt": [
              "@max_worker_threads",
              "@recommended_max_worker_threads"
            ]
          }
        ]
      },
      "probes": [
        "SysDmOsHostInfo",
        "SysConfiguration"
      ]
    },
    {
      "id": "XpCmdShellOn",
      "itemType": "definition",
      "target": {
        "type": "Server",
        "platform": [
          "Windows",
          "Linux"
        ],
        "engineEdition": "OnPremises",
        "version": "[11.0,)"
      },
      "tags": [
        "DefaultRuleset",
        "Configuration"
      ],
      "displayName": "Option 'xp_cmdshell' is disabled",
      "description": "The xp_cmdshell option is a SQL Server configuration option that enables system administrators to control whether the xp_cmdshell extended stored procedure can be executed on a system. By default, the xp_cmdshell option is disabled on new installations. ",
      "message": "Disable 'xp_cmdshell' as it exposes to the security risks",
      "helpLink": "https://docs.microsoft.com/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option",
      "level": "Warning",
      "condition": {
        "not": "@xp_cmdshell"
      },
      "probes": [
        "SysConfiguration"
      ]
    }
  ],
  "probes": {
    "EnabledGlobalTraceFlags": [
      {
        "type": "SQL",
        "target": {
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DECLARE @tracestatus TABLE (TraceFlag NVARCHAR(40), [Status] tinyint, [Global] tinyint, [Session] tinyint); INSERT INTO @tracestatus EXEC ('DBCC TRACESTATUS WITH NO_INFOMSGS'); IF NOT EXISTS(SELECT * FROM @tracestatus WHERE Global=1) SELECT 0 AS [TraceFlag], 0 AS [Status] ELSE SELECT [TraceFlag], [Status] FROM @tracestatus WHERE Global=1",
          "transform": {
            "type": "aggregate",
            "map": {
              "TraceFlag": "array"
            }
          }
        }
      }
    ],
    "CountBlackBoxTraces": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT COUNT(id) AS [BlackBoxTraceCount] FROM [sys].[traces] WHERE [path] LIKE '%blackbox%.trc' AND status=1;"
        }
      }
    ],
    "CountDefaultTraces": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT COUNT(id) AS [DefaultTraceCount] FROM [sys].[traces] WHERE is_default = 1 AND status = 1;"
        }
      }
    ],
    "XEvent.SystemHealth": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT COUNT(name) AS [XEvent.SystemHealthCount] FROM [sys].[dm_xe_sessions] WHERE [name] = 'system_health';"
        }
      }
    ],
    "XEvent.SPServerDiagnostics": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT COUNT(name) AS [XEvent.SPServerDiagnostics] FROM sys.dm_xe_sessions WHERE [name] = 'sp_server_diagnostics session';"
        }
      }
    ],
    "DeprecatedFeaturesStats": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT [instance_name] AS [DeprecatedFeature] FROM [sys].[dm_os_performance_counters] WHERE ([object_name] LIKE '%Deprecated Features%') AND ([cntr_value] > 0);",
          "transform": {
            "type": "aggregate",
            "map": {
              "DeprecatedFeature": "join"
            }
          }
        }
      }
    ],
    "DatabaseConfiguration": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "version": "[11.0,12.0)",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance"
        },
        "implementation": {
          "query": "SELECT db.is_auto_create_stats_on, db.is_auto_update_stats_on, 0 AS query_store_state, db.collation_name, (SELECT collation_name FROM master.sys.databases (NOLOCK) WHERE database_id = 1) AS master_collation, db.is_auto_close_on, db.is_auto_shrink_on, db.page_verify_option, db.is_db_chaining_on, NULL AS is_auto_create_stats_incremental_on, db.is_trustworthy_on, db.is_parameterization_forced,db.is_read_only AS IsReadOnly,db.[state] AS DbState FROM [sys].[databases] (NOLOCK) AS db WHERE db.[name]=@TargetName"
        }
      },
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "version": "[12.0, 13.0)",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance"
        },
        "implementation": {
          "query": "SELECT db.is_auto_create_stats_on, db.is_auto_update_stats_on, 0 AS query_store_state, db.collation_name, (SELECT collation_name FROM master.sys.databases (NOLOCK) WHERE database_id = 1) AS master_collation, db.is_auto_close_on, db.is_auto_shrink_on, db.page_verify_option, db.is_db_chaining_on, db.is_auto_create_stats_incremental_on, db.is_trustworthy_on, db.is_parameterization_forced,db.is_read_only AS IsReadOnly,db.[state] AS DbState FROM [sys].[databases] (NOLOCK) AS db WHERE db.[name]=@TargetName"
        }
      },
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "version": "[13.0,)",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT db.is_auto_create_stats_on, db.is_auto_update_stats_on, (SELECT CAST(actual_state AS DECIMAL) FROM [sys].[database_query_store_options]) AS query_store_state, db.collation_name, (SELECT collation_name FROM master.sys.databases (NOLOCK) WHERE database_id = 1) AS master_collation, db.is_auto_close_on, db.is_auto_shrink_on, db.page_verify_option, db.is_db_chaining_on, db.is_auto_create_stats_incremental_on, db.is_trustworthy_on, db.is_parameterization_forced,db.is_read_only AS IsReadOnly,db.[state] AS DbState FROM [sys].[databases] (NOLOCK) AS db WHERE db.[name]=@TargetName"
        }
      }
    ],
    "FKNoIndexes": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT QUOTENAME(fk.parent_schema_name)+ '.' + QUOTENAME(fk.parent_table_name) + '.' + QUOTENAME(fk.constraint_name) AS ConstraintName FROM ( SELECT t.name AS [parent_schema_name], OBJECT_NAME(FKC.parent_object_id) [parent_table_name], OBJECT_NAME(constraint_object_id) AS [constraint_name], SUBSTRING((SELECT ',' + RTRIM(COL_NAME(k.parent_object_id,parent_column_id)) AS [data()] FROM sys.foreign_key_columns k (NOLOCK) INNER JOIN sys.foreign_keys (NOLOCK) ON k.constraint_object_id = [object_id] AND k.constraint_object_id = FKC.constraint_object_id ORDER BY constraint_column_id FOR XML PATH('')), 2, 8000) AS [parent_columns] FROM sys.foreign_key_columns FKC (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON FKC.parent_object_id = o.[object_id] INNER JOIN sys.tables mst (NOLOCK) ON mst.[object_id] = o.[object_id] INNER JOIN sys.schemas t (NOLOCK) ON t.[schema_id] = mst.[schema_id] INNER JOIN sys.objects so (NOLOCK) ON FKC.referenced_object_id = so.[object_id] WHERE o.type = 'U' AND so.type = 'U' GROUP BY o.[schema_id],so.[schema_id],FKC.parent_object_id,constraint_object_id,referenced_object_id,t.name ) fk WHERE NOT EXISTS (SELECT 1 FROM ( SELECT t.name AS schemaName, OBJECT_NAME(mst.[object_id]) AS objectName, SUBSTRING(( SELECT ',' + RTRIM(ac.name) FROM sys.tables AS st INNER JOIN sys.indexes AS mi ON st.[object_id] = mi.[object_id] INNER JOIN sys.index_columns AS ic ON mi.[object_id] = ic.[object_id] AND mi.[index_id] = ic.[index_id] INNER JOIN sys.all_columns AS ac ON st.[object_id] = ac.[object_id] AND ic.[column_id] = ac.[column_id] WHERE i.[object_id] = mi.[object_id] AND i.index_id = mi.index_id AND ic.is_included_column = 0 ORDER BY ac.column_id FOR XML PATH('')), 2, 8000) AS KeyCols FROM sys.indexes AS i INNER JOIN sys.tables AS mst ON mst.[object_id] = i.[object_id] INNER JOIN sys.schemas AS t ON t.[schema_id] = mst.[schema_id] WHERE i.[type] IN (1,2,5,6) AND i.is_unique_constraint = 0 AND mst.is_ms_shipped = 0 ) ict WHERE fk.parent_schema_name = ict.schemaName AND fk.parent_table_name = ict.objectName AND REPLACE(fk.parent_columns,' ,',',') = ict.KeyCols);",
          "transform": {
            "type": "aggregate",
            "map": {
              "ConstraintName": "join"
            }
          }
        }
      }
    ],
    "Hints.InstanceStatistics": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT COUNT([counter]) AS [HintUsageCount] FROM [sys].[dm_exec_query_optimizer_info] WHERE ([counter] = 'order hint' OR [counter] = 'join hint') AND occurrence > 1;"
        }
      }
    ],
    "Hints.ModuleUsage": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT ss.name AS [Schema_Name], so.name AS [Object_Name], so.type_desc, CASE WHEN sm.[definition] LIKE '%FORCE ORDER%' THEN '[FORCE ORDER Hint]' WHEN sm.[definition] LIKE '%MERGE JOIN%' OR sm.[definition] LIKE '%LOOP JOIN%' OR sm.[definition] LIKE '%HASH JOIN%' THEN '[JOIN Hint]' END AS Hint FROM [sys].[sql_modules] AS sm INNER JOIN [sys].[objects] AS so ON sm.[object_id] = so.[object_id] INNER JOIN [sys].[schemas] AS ss ON so.[schema_id] = ss.[schema_id] WHERE (sm.[definition] LIKE '%FORCE ORDER%' OR sm.[definition] LIKE '%MERGE JOIN%' OR sm.[definition] LIKE '%LOOP JOIN%' OR sm.[definition] LIKE '%HASH JOIN%') AND OBJECTPROPERTY(sm.[object_id],'IsMSShipped') = 0;"
        }
      }
    ],
    "CachedPlans.SingleUseRatio": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DECLARE @Size1 AS REAL, @Size2 AS REAL; SET @Size1=COALESCE((SELECT SUM(CAST(size_in_bytes AS bigint)) AS Size1 FROM [sys].[dm_exec_cached_plans] (NOLOCK) WHERE cacheobjtype LIKE '%Plan%' AND usecounts = 1),0);SET @Size2=COALESCE((SELECT SUM(CAST(size_in_bytes AS bigint)) AS Size2 FROM [sys].[dm_exec_cached_plans] (NOLOCK) WHERE cacheobjtype LIKE '%Plan%' AND usecounts > 1),0);SELECT @Size1/(@Size1+@Size2) AS [SingleUsePlansUseRatio];"
        }
      }
    ],
    "Hypothetical.Indexes": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT QUOTENAME(t.name) AS [Schema], QUOTENAME(o.[name]) AS [Object], i.name AS [IndexName] FROM [sys].[indexes] i INNER JOIN [sys].[objects] AS o ON o.[object_id] = i.[object_id] INNER JOIN [sys].[tables] AS mst ON mst.[object_id] = i.[object_id] INNER JOIN [sys].[schemas] AS t ON t.[schema_id] = mst.[schema_id] WHERE i.is_hypothetical = 1;"
        }
      }
    ],
    "Hypothetical.Statistics": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT QUOTENAME(t.name) AS [Schema], QUOTENAME(o.[name]) AS [Object], s.name AS [StatName] FROM [sys].[stats] s INNER JOIN [sys].[objects] AS o (NOLOCK) ON o.[object_id] = s.[object_id] INNER JOIN [sys].[tables] AS mst (NOLOCK) ON mst.[object_id] = s.[object_id] INNER JOIN [sys].[schemas] AS t (NOLOCK) ON t.[schema_id] = mst.[schema_id] WHERE (s.name LIKE 'hind_%' OR s.name LIKE '_dta_stat%') AND auto_created = 0 AND s.name NOT IN (SELECT name FROM sys.indexes);"
        }
      }
    ],
    "SQLServerVersion": [
      {
        "type": "SQL",
        "type": "CLR",
        "name": "SQLServerVersion",
        "implementation": {
          "class": "Microsoft.SqlServer.Management.Assessment.Probes.ServerVersionProbe"
        }
      }
    ],
    "MissedIndexes": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT RIGHT(i.[statement],LEN(i.[statement])-(LEN(m.[name])+3)) AS [Table], CASE WHEN (i.equality_columns IS NOT NULL AND i.inequality_columns IS NULL) THEN i.equality_columns WHEN (i.equality_columns IS NULL AND i.inequality_columns IS NOT NULL) THEN i.inequality_columns ELSE i.equality_columns+','+i.inequality_columns END AS [KeyCols], ISNULL(i.included_columns,'') AS [IncludedCols],(CONVERT(NUMERIC(19,3),s.user_seeks)+CONVERT(NUMERIC(19,3),s.user_scans))*CONVERT(NUMERIC(19,3),s.avg_total_user_cost)*CONVERT(NUMERIC(19,3),s.avg_user_impact) AS [Score] FROM [sys].[dm_db_missing_index_details] i INNER JOIN [master].[sys].[databases] m ON i.database_id=m.database_id INNER JOIN [sys].[dm_db_missing_index_groups] g ON i.index_handle=g.index_handle INNER JOIN [sys].[dm_db_missing_index_group_stats] s ON s.group_handle=g.index_group_handle WHERE m.[name]=@TargetName"
        }
      }
    ],
    "DatabaseBackups": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT db.recovery_model, db.recovery_model_desc, fb.LastFullBackup, tl.LastTLBackup FROM [master].[sys].[databases] db (NOLOCK) LEFT JOIN (SELECT b.database_name, DATEDIFF(HH, MAX(b.backup_finish_date),GETDATE()) AS LastFullBackup FROM [msdb].[dbo].[backupset] b WHERE b.is_copy_only=0 AND b.type='D' GROUP BY b.database_name) fb ON fb.database_name=db.name LEFT JOIN (SELECT b.database_name, DATEDIFF(HH, MAX(b.backup_finish_date), GETDATE()) AS LastTLBackup FROM [msdb].[dbo].[backupset] b WHERE b.is_copy_only=0 AND b.type='L' GROUP BY b.database_name HAVING MAX(b.backup_finish_date)>=(SELECT MAX(f.backup_finish_date) FROM [msdb].[dbo].[backupset] f WHERE f.is_copy_only=0 AND f.type IN ('D','I') AND f.database_name=b.database_name GROUP BY f.database_name )) tl ON fb.database_name=tl.database_name WHERE db.name=@TargetName;"
        }
      }
    ],
    "TempDBFiles": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT COUNT(DISTINCT size) AS filesizeCount FROM tempdb.sys.database_files WHERE [type] = 0"
        }
      }
    ],
    "ServerInstanceConfiguration": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT ( SELECT COUNT(cpu_id) FROM sys.dm_os_schedulers WHERE is_online = 1 AND scheduler_id < 255 AND parent_node_id < 64 ) AS online_logical_processors, ( SELECT COUNT(DISTINCT parent_node_id) FROM sys.dm_os_schedulers WHERE scheduler_id < 255 AND parent_node_id < 64 ) AS numa_nodes, ( SELECT COUNT(*) FROM ( SELECT COUNT(cpu_id) CpuNodeCnt FROM sys.dm_os_schedulers WHERE is_online = 1 AND scheduler_id < 255 AND parent_node_id < 64 GROUP BY parent_node_id, is_online HAVING COUNT(cpu_id) = 1 ) AS Node_CPU ) AS nodes_single_cpu, ( SELECT COUNT(cpu_id) FROM sys.dm_os_schedulers WHERE scheduler_id < 255 AND parent_node_id < 64 ) AS total_logical_processors"
        }
      }
    ],
    "DatabaseMasterFiles": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT mf.database_id,dbs.name AS databaseName,[type],physical_name,mf.name AS fileName,size,growth,is_percent_growth FROM [sys].[master_files] AS mf INNER JOIN [sys].databases AS dbs ON mf.database_id=dbs.database_id WHERE mf.database_id=ISNULL(@dbId,mf.database_id) AND [type]=ISNULL(@type,[type])"
        }
      },
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT [type],physical_name,mf.name AS fileName,size,growth,is_percent_growth FROM [sys].[master_files] AS mf INNER JOIN [sys].databases AS dbs ON mf.database_id=dbs.database_id WHERE dbs.name=@TargetName AND [type]=ISNULL(@type,[type]) AND is_percent_growth=ISNULL(@is_percent_growth,is_percent_growth)"
        }
      }
    ],
    "InstantFileInitialization": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "version": "[13.0.4001,)",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises"
        },
        "implementation": {
          "query": "SELECT instant_file_initialization_enabled FROM [sys].[dm_server_services] WHERE servicename LIKE 'SQL Server%' AND servicename NOT LIKE 'SQL Server Agent%' AND servicename NOT LIKE 'SQL Server Launchpad%'"
        }
      },
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT 'N' AS instant_file_initialization_enabled"
        }
      }
    ],
    "IndexesDefinitions": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "version": "[11.0,)",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT i.object_id,QUOTENAME(t.name)+'.'+QUOTENAME(st.name) AS TableName,QUOTENAME(i.name) AS IndexName,QUOTENAME(ac.Name) AS ColumnName,ic.is_included_column,i.is_primary_key,i.filter_definition,i.is_unique,ic.key_ordinal,sty.name AS ColTypeName,CASE sty.name WHEN 'nvarchar' THEN ac.max_length/2 ELSE ac.max_length END AS ColTypeSize,i.fill_factor,i.is_disabled,i.type AS IndexType,index_stat.Hits,index_stat.Reads_Ratio,index_stat.last_user_update FROM [sys].[tables] AS st INNER JOIN [sys].[schemas] AS t ON t.[schema_id]=st.[schema_id] INNER JOIN [sys].[indexes] AS i ON st.[object_id]=i.[object_id] INNER JOIN [sys].[index_columns] AS ic ON i.[object_id]=ic.[object_id] AND i.[index_id]=ic.[index_id] INNER JOIN [sys].[all_columns] AS ac ON st.[object_id]=ac.[object_id] AND ic.[column_id]=ac.[column_id] INNER JOIN [sys].[types] AS sty ON ac.user_type_id=sty.user_type_id LEFT JOIN(SELECT s.object_id,s.index_id,(stat.user_seeks+stat.user_scans+stat.user_lookups) AS [Hits],RTRIM(CONVERT(NVARCHAR(10),CAST(CASE WHEN (stat.user_seeks+stat.user_scans+stat.user_lookups) = 0 THEN 0 ELSE CONVERT(REAL,(stat.user_seeks+stat.user_scans+stat.user_lookups)) * 100/CASE (stat.user_seeks+stat.user_scans+stat.user_lookups+stat.user_updates) WHEN 0 THEN 1 ELSE CONVERT(REAL,(stat.user_seeks+stat.user_scans+stat.user_lookups+stat.user_updates)) END END AS DECIMAL(18,2)))) AS [Reads_Ratio],MAX(stat.last_user_update) AS last_user_update FROM sys.indexes s INNER JOIN sys.dm_db_index_usage_stats stat on stat.object_id = s.object_id and stat.index_id = s.index_id WHERE s.type IN (2,6) AND s.is_primary_key=0 AND s.is_unique_constraint=0 GROUP BY s.object_id,s.index_id,stat.user_seeks,stat.user_scans,stat.user_lookups,stat.user_updates ) index_stat ON index_stat.object_id = i.object_id AND index_stat.index_id = i.index_id WHERE i.type IN (1,2,5,6) AND st.is_ms_shipped=0 AND i.is_unique_constraint=0",
          "transform": {
            "type": "indexDefinition"
          }
        }
      }
    ],
    "UserObjectsCountInMasterDB": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "name": "master",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT sao.name AS [Object_Name] FROM master.sys.all_objects sao INNER JOIN master.sys.schemas ss ON sao.[schema_id] = ss.[schema_id] WHERE sao.is_ms_shipped = 0 AND sao.[type] IN ('AF','FN','P','IF','PC','TF','TR','T','V') ORDER BY sao.name, sao.type_desc;",
          "transform": {
            "type": "aggregate",
            "map": {
              "Object_Name": "join"
            }
          }
        }
      }
    ],
    "Autogrow1GB": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "version": "[13.0.4001,)",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance"
        },
        "implementation": {
          "query": "DECLARE @ifi bit IF ( SELECT instant_file_initialization_enabled FROM sys.dm_server_services WHERE servicename LIKE 'SQL Server%' AND servicename NOT LIKE 'SQL Server Agent%' AND servicename NOT LIKE 'SQL Server Launchpad%' ) = 'Y' SET @ifi = 1; ELSE SET @ifi = 0; SELECT mf.[name] AS FileName FROM [sys].[master_files] AS mf (NOLOCK) INNER JOIN [sys].[databases] as dbs (NOLOCK) ON mf.database_id = dbs.database_id WHERE [type] >= CASE WHEN @ifi = 1 THEN 1 ELSE 0 END AND [type] < 2 AND ((is_percent_growth = 1 AND ((CONVERT(bigint,size)*8)*growth)/100 > 1048576) OR (is_percent_growth = 0 AND growth*8 > 1048576)) AND dbs.name = @TargetName",
          "transform": {
            "type": "aggregate",
            "map": {
              "FileName": "join"
            }
          }
        }
      }
    ],
    "CpuIdle": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DECLARE @ts_now bigint; SELECT @ts_now=ms_ticks FROM sys.dm_os_sys_info (NOLOCK); SELECT ISNULL(MIN(SystemIdle),100) AS MinIdle FROM (SELECT AVG(SystemIdle) AS SystemIdle FROM (SELECT record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle, [TIMESTAMP] FROM (SELECT [TIMESTAMP], CONVERT(xml, record) AS record FROM sys.dm_os_ring_buffers (NOLOCK) WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' AND record LIKE '%<SystemHealth>%' AND @ts_now-[TIMESTAMP]<=7200000) AS xrb) AS si GROUP BY (@ts_now-[TIMESTAMP])/600000) AS avg;"
        }
      }
    ],
    "ReplicationErrors": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "IF EXISTS(SELECT * FROM [sys].[databases] WHERE is_distributor = 1) BEGIN DECLARE @dbName sysname, @sqlcmd NVARCHAR(max), @dbId int = 0 DECLARE @resultTbl TABLE(publication sysname) WHILE EXISTS(SELECT * FROM [sys].[databases] WHERE is_distributor = 1 AND database_id > @dbId) BEGIN SELECT TOP(1) @dbId = database_id, @dbName = [name] FROM [sys].[databases] WHERE is_distributor = 1 AND database_id > @dbId ORDER BY database_id; SET @sqlcmd = N'SELECT ''['+@dbName+'].'' + msa.publication FROM ['+@dbName+'].[dbo].[MSdistribution_history] AS msh INNER JOIN ['+@dbName+'].[dbo].[MSrepl_errors] AS mse ON mse.id = msh.error_id INNER JOIN ['+@dbName+'].[dbo].[MSdistribution_agents] AS msa ON msh.agent_id = msa.id WHERE mse.time >= DATEADD(hh, -24, GETDATE()) GROUP BY msa.publication' INSERT INTO @resultTbl EXECUTE sp_executesql @sqlcmd END SELECT * FROM @resultTbl END;",
          "transform": {
            "type": "aggregate",
            "map": {
              "publication": "join"
            }
          }
        }
      }
    ],
    "SysAlerts": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT DISTINCT severity, message_id FROM [msdb].[dbo].[sysalerts]",
          "transform": {
            "type": "aggregate",
            "map": {
              "severity": "array",
              "message_id": "array"
            }
          }
        }
      }
    ],
    "WeakPassword": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DECLARE @word TABLE (word NVARCHAR(50)); INSERT INTO @word values ('0'),('012'),('0123'),('01234'),('012345'),('0123456'),('01234567'),('012345678'),('0123456789'),('01234567890'),('11111'),('111111'),('1111111'),('11111111'),('21'),('321'),('4321'),('54321'),('654321'),('7654321'),('87654321'),('987654321'),('0987654321'),('pwd'),('Password'),('password'),('P@ssw0rd'),('p@ssw0rd'),('Teste'),('teste'),('Test'),('test'),(''),('p@wd'),('Qwerty'),('qwerty'),('Password1'),('password1'); SELECT DISTINCT RTRIM(s.name) AS [PasswordData] FROM @word d INNER JOIN master.sys.sql_logins s ON PWDCOMPARE(d.word, s.[password_hash]) = 1",
          "transform": {
            "type": "aggregate",
            "map": {
              "PasswordData": "join"
            }
          }
        }
      }
    ],
    "VLF": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DBCC LOGINFO (@TargetName) WITH NO_INFOMSGS"
        }
      }
    ],
    "BadNamingSP": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT s.[name]+'.'+so.[name] AS ObjectName FROM sys.objects so INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND [type] = 'P' AND so.[name] LIKE 'sp[_]%' AND so.[name] NOT IN ('sp_alterdiagram','sp_creatediagram','sp_dropdiagram','sp_helpdiagramdefinition','sp_helpdiagrams','sp_renamediagram','sp_upgraddiagrams');",
          "transform": {
            "type": "aggregate",
            "map": {
              "ObjectName": "join"
            }
          }
        }
      }
    ],
    "BadNamingSpecialChars": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT s.[name] +'.'+so.[name] as ObjectName FROM sys.objects so INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND [type] <> 'S' AND (so.[name] LIKE '% %' OR so.[name] LIKE '%[[]%' OR so.[name] LIKE '%]%' OR so.[name] LIKE '%-%' OR so.[name] LIKE '%.%' OR so.[name] LIKE '%,%' OR so.[name] LIKE '%;%' OR so.[name] LIKE '%' + CHAR(34) + '%' OR so.[name] LIKE '%' + CHAR(39) + '%');",
          "transform": {
            "type": "aggregate",
            "map": {
              "ObjectName": "join"
            }
          }
        }
      }
    ],
    "BadNamingSpecialCharsColumns": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT s.name +'.'+ so.name + '.'+sc.name AS ObjectName FROM sys.columns sc INNER JOIN sys.objects so ON sc.object_id = so.object_id INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND (sc.[name] LIKE '% %' OR sc.[name] LIKE '%[[]%' OR sc.[name] LIKE '%]%' OR sc.[name] LIKE '%-%' OR sc.[name] LIKE '%.%' OR sc.[name] LIKE '%,%' OR sc.[name] LIKE '%;%' OR sc.[name] LIKE '%' + CHAR(34) + '%' OR sc.[name] LIKE '%' + CHAR(39) + '%') ORDER BY 1;",
          "transform": {
            "type": "aggregate",
            "map": {
              "ObjectName": "join"
            }
          }
        }
      }
    ],
    "BadNamingUserFunctions": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT s.name+'.'+so.name AS ObjectName FROM sys.objects so INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND [type] IN ('FN','FS','TF','IF') AND so.[name] LIKE 'fn[_]%' AND so.[name] NOT IN ('fn_diagram_objects')",
          "transform": {
            "type": "aggregate",
            "map": {
              "ObjectName": "join"
            }
          }
        }
      }
    ],
    "BadNamingKeywords": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": [
            "DECLARE @KeywordTbl AS TABLE(Keyword VARCHAR(255)) INSERT INTO @KeywordTbl VALUES ('ABSOLUTE'),('ACTION'),('ADA'),('ADD'),('ADMIN'),('AFTER'),('AGGREGATE'),('ALIAS'),('ALL'),('ALLOCATE'),('ALTER'),('AND'),('ANY'),('ARE'),('ARRAY'),('AS'),('ASC'),('ASSERTION'),('AT'),('AUTHORIZATION'),('AVG'),('BACKUP'),('BEFORE'),('BEGIN'),('BETWEEN'),('BINARY'),('BIT'),('BIT_LENGTH'),('BLOB'),('BOOLEAN'),('BOTH'),('BREADTH'),('BREAK'),('BROWSE'),('BULK'),('BY'),('CALL'),('CASCADE'),('CASCADED'),('CASE'),('CAST'),('CATALOG'),('CHAR'),('CHAR_LENGTH'),('CHARACTER'),('CHARACTER_LENGTH'),('CHECK'),('CHECKPOINT'),('CLASS'),('CLOB'),('CLOSE'),('CLUSTERED'),('COALESCE'),('COLLATE'),('COLLATION'),('COLUMN'),('COMMIT'),('COMPLETION'),('COMPUTE'),('CONNECT'),('CONNECTION'),('CONSTRAINT'),('CONSTRAINTS'),('CONSTRUCTOR'),('CONTAINS'),('CONTAINSTABLE'),('CONTINUE'),('CONVERT'),('CORRESPONDING'),('COUNT'),('CREATE'),('CROSS'),('CUBE'),('CURRENT'),('CURRENT_DATE'),('CURRENT_PATH'),('CURRENT_ROLE'),('CURRENT_TIME'),('CURRENT_TIMESTAMP'),('CURRENT_USER'),('CURSOR'),('CYCLE'),('DATA'),('DATABASE'),('DATE'),('DAY'),('DBCC'),('DEALLOCATE'),('DEC'),('DECIMAL'),('DECLARE'),('DEFAULT'),('DEFERRABLE'),('DEFERRED'),('DELETE'),('DENY'),('DEPTH'),('DEREF'),('DESC'),('DESCRIBE'),('DESCRIPTOR'),('DESTROY'),('DESTRUCTOR'),('DETERMINISTIC'),('DIAGNOSTICS'),('DICTIONARY'),('DISCONNECT'),('DISK'),('DISTINCT'),('DISTRIBUTED'),('DOMAIN'),('DOUBLE'),('DROP'),('DUMMY'),('DUMP'),('DYNAMIC') SELECT [schema]+'.'+[ObjName] AS ObjectName FROM ( SELECT s.name [schema],so.name [ObjName],type,type_desc FROM sys.objects so INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND [type] <> 'S') AS ObjNames CROSS JOIN @KeywordTbl WHERE ObjName like '% '+Keyword+' %' OR ObjName like '% '+Keyword OR ObjName=Keyword",
            "DECLARE @KeywordTbl AS TABLE(Keyword VARCHAR(255)) INSERT INTO @KeywordTbl VALUES ('EACH'),('ELSE'),('END'),('END-EXEC'),('EQUALS'),('ERRLVL'),('ESCAPE'),('EVERY'),('EXCEPT'),('EXCEPTION'),('EXEC'),('EXECUTE'),('EXISTS'),('EXIT'),('EXTERNAL'),('EXTRACT'),('FALSE'),('FETCH'),('FILE'),('FILLFACTOR'),('FIRST'),('FLOAT'),('FOR'),('FOREIGN'),('FORTRAN'),('FOUND'),('FREE'),('FREETEXT'),('FREETEXTTABLE'),('FROM'),('FULL'),('FULLTEXTTABLE'),('FUNCTION'),('GENERAL'),('GET'),('GLOBAL'),('GO'),('GOTO'),('GRANT'),('GROUP'),('GROUPING'),('HAVING'),('HOLDLOCK'),('HOST'),('HOUR'),('IDENTITY'),('IDENTITY_INSERT'),('IDENTITYCOL'),('IF'),('IGNORE'),('IMMEDIATE'),('IN'),('INCLUDE'),('INDEX'),('INDICATOR'),('INITIALIZE'),('INITIALLY'),('INNER'),('INOUT'),('INPUT'),('INSENSITIVE'),('INSERT'),('INT'),('INTEGER'),('INTERSECT'),('INTERVAL'),('INTO'),('IS'),('ISOLATION'),('ITERATE'),('JOIN'),('KEY'),('KILL'),('LANGUAGE'),('LARGE'),('LAST'),('LATERAL'),('LEADING'),('LEFT'),('LESS'),('LEVEL'),('LIKE'),('LIMIT'),('LINENO'),('LOAD'),('LOCAL'),('LOCALTIME'),('LOCALTIMESTAMP'),('LOCATOR'),('LOWER'),('MAP'),('MATCH'),('MAX'),('MIN'),('MINUTE'),('MODIFIES'),('MODIFY'),('MODULE'),('MONTH') SELECT [schema]+'.'+[ObjName] AS ObjectName FROM ( SELECT s.name [schema],so.name [ObjName],type,type_desc FROM sys.objects so INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND [type] <> 'S') AS ObjNames CROSS JOIN @KeywordTbl WHERE ObjName like '% '+Keyword+' %' OR ObjName like '% '+Keyword OR ObjName=Keyword",
            "DECLARE @KeywordTbl AS TABLE(Keyword VARCHAR(255)) INSERT INTO @KeywordTbl VALUES ('NAMES'),('NATIONAL'),('NATURAL'),('NCHAR'),('NCLOB'),('NEW'),('NEXT'),('NO'),('NOCHECK'),('NONCLUSTERED'),('NONE'),('NOT'),('NULL'),('NULLIF'),('NUMERIC'),('OBJECT'),('OCTET_LENGTH'),('OF'),('OFF'),('OFFSETS'),('OLD'),('ON'),('ONLY'),('OPEN'),('OPENDATASOURCE'),('OPENQUERY'),('OPENROWSET'),('OPENXML'),('OPERATION'),('OPTION'),('OR'),('ORDER'),('ORDINALITY'),('OUT'),('OUTER'),('OUTPUT'),('OVER'),('OVERLAPS'),('PAD'),('PARAMETER'),('PARAMETERS'),('PARTIAL'),('PASCAL'),('PATH'),('PERCENT'),('PLAN'),('POSITION'),('POSTFIX'),('PRECISION'),('PREFIX'),('PREORDER'),('PREPARE'),('PRESERVE'),('PRIMARY'),('PRINT'),('PRIOR'),('PRIVILEGES'),('PROC'),('PROCEDURE'),('PUBLIC'),('RAISERROR'),('READ'),('READS'),('READTEXT'),('REAL'),('RECONFIGURE'),('RECURSIVE'),('REF'),('REFERENCES'),('REFERENCING'),('RELATIVE'),('REPLICATION'),('RESTORE'),('RESTRICT'),('RESULT'),('RETURN'),('RETURNS'),('REVOKE'),('RIGHT'),('ROLE'),('ROLLBACK'),('ROLLUP'),('ROUTINE'),('ROW'),('ROWCOUNT'),('ROWGUIDCOL'),('ROWS'),('RULE') SELECT [schema]+'.'+[ObjName] AS ObjectName FROM ( SELECT s.name [schema],so.name [ObjName],type,type_desc FROM sys.objects so INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND [type] <> 'S') AS ObjNames CROSS JOIN @KeywordTbl WHERE ObjName like '% '+Keyword+' %' OR ObjName like '% '+Keyword OR ObjName=Keyword",
            "DECLARE @KeywordTbl AS TABLE(Keyword VARCHAR(255)) INSERT INTO @KeywordTbl VALUES ('SAVE'),('SAVEPOINT'),('SCHEMA'),('SCOPE'),('SCROLL'),('SEARCH'),('SECOND'),('SECTION'),('SELECT'),('SEQUENCE'),('SESSION'),('SESSION_USER'),('SET'),('SETS'),('SETUSER'),('SHUTDOWN'),('SIZE'),('SMALLINT'),('SOME'),('SPACE'),('SPECIFIC'),('SPECIFICTYPE'),('SQL'),('SQLCA'),('SQLCODE'),('SQLERROR'),('SQLEXCEPTION'),('SQLSTATE'),('SQLWARNING'),('START'),('STATE'),('STATEMENT'),('STATIC'),('STATISTICS'),('STRUCTURE'),('SUBSTRING'),('SUM'),('SYSTEM_USER'),('TABLE'),('TEMPORARY'),('TERMINATE'),('TEXTSIZE'),('THAN'),('THEN'),('TIME'),('TIMESTAMP'),('TIMEZONE_HOUR'),('TIMEZONE_MINUTE'),('TO'),('TOP'),('TRAILING'),('TRAN'),('TRANSACTION'),('TRANSLATE'),('TRANSLATION'),('TREAT'),('TRIGGER'),('TRIM'),('TRUE'),('TRUNCATE'),('UNDER'),('UNION'),('UNIQUE'),('UNKNOWN'),('UNNEST'),('UPDATE'),('UPDATETEXT'),('UPPER'),('USAGE'),('USE'),('USER'),('USING'),('VALUE'),('VALUES'),('VARCHAR'),('VARIABLE'),('VARYING'),('VIEW'),('WAITFOR'),('WHEN'),('WHENEVER'),('WHERE'),('WHILE'),('WITH'),('WITHOUT'),('WORK'),('WRITE'),('WRITETEXT'),('YEAR'),('ZONE') SELECT [schema]+'.'+[ObjName] AS ObjectName FROM ( SELECT s.name [schema],so.name [ObjName],type,type_desc FROM sys.objects so INNER JOIN sys.schemas s ON so.schema_id = s.schema_id WHERE so.is_ms_shipped = 0 AND [type] <> 'S') AS ObjNames CROSS JOIN @KeywordTbl WHERE ObjName like '% '+Keyword+' %' OR ObjName like '% '+Keyword OR ObjName=Keyword"
          ],
          "transform": {
            "type": "aggregate",
            "map": {
              "ObjectName": "join"
            }
          }
        }
      }
    ],
    "DeprecatedFeaturesSQLModules": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": [
            "IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion/0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('disk init',NULL,9),('disk resize',NULL,9),('for load',NULL,9),('dbcc dbrepair',NULL,9),('dbcc newalloc',NULL,9),('dbcc pintable',NULL,9),('dbcc unpintable',NULL,9),('dbcc rowlock',NULL,9),('dbcc textall',NULL,9),('dbcc textalloc',NULL,9),('*=',NULL,9),('=*',NULL,9),('setuser',9,NULL),('sp_helpdevice',9,NULL),('sp_addtype',9,NULL),('sp_attach_db',9,NULL),('sp_attach_single_file_db',9,NULL),('sp_bindefault',9,NULL),('sp_unbindefault',9,NULL),('sp_bindrule',9,NULL),('sp_unbindrule',9,NULL),('create default',9,NULL),('drop default',9,NULL),('create rule',9,NULL),('drop rule',9,NULL),('sp_renamedb',9,NULL),('sp_resetstatus',9,NULL),('dbcc dbreindex',9,NULL),('dbcc indexdefrag',9,NULL),('dbcc showcontig',9,NULL),('sp_addextendedproc',9,NULL),('sp_dropextendedproc',9,NULL),('sp_helpextendedproc',9,NULL),('xp_loginconfig',1,NULL),('sp_fulltext_catalog',9,NULL),('sp_fulltext_table',9,NULL),('sp_fulltext_column',9,NULL),('sp_fulltext_database',9,NULL),('sp_help_fulltext_tables',9,NULL),('sp_help_fulltext_columns',9,NULL),('sp_help_fulltext_catalogs',9,NULL),('sp_help_fulltext_tables_cursor',9,NULL),('sp_help_fulltext_columns_cursor',9,NULL) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT QUOTENAME(ss.name)+'.'+QUOTENAME(so.name) AS [ObjectName],tk.Keyword FROM sys.sql_modules sm (NOLOCK) INNER JOIN sys.objects so (NOLOCK) ON sm.[object_id]=so.[object_id] INNER JOIN sys.schemas ss (NOLOCK) ON so.[schema_id]=ss.[schema_id] CROSS JOIN @tblKeywords tk WHERE PATINDEX('%' + tk.Keyword + '%',LOWER(sm.[definition]) COLLATE DATABASE_DEFAULT)>1 AND OBJECTPROPERTY(sm.[object_id],'IsMSShipped')=0 END",
            "IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion/0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('sp_help_fulltext_catalogs_cursor',9,NULL),('fn_get_sql',9,NULL),('sp_indexoption',9,NULL),('sp_lock',9,NULL),('indexkey_property',9,NULL),('file_id',9,NULL),('sp_certify_removable',9,NULL),('sp_create_removable',9,NULL),('sp_dbremove',9,NULL),('sp_addapprole',9,NULL),('sp_dropapprole',9,NULL),('sp_addlogin',9,NULL),('sp_droplogin',9,NULL),('sp_adduser',9,NULL),('sp_dropuser',9,NULL),('sp_grantdbaccess',9,NULL),('sp_revokedbaccess',9,NULL),('sp_addrole',9,NULL),('sp_droprole',9,NULL),('sp_approlepassword',9,NULL),('sp_password',9,NULL),('sp_changeobjectowner',9,NULL),('sp_defaultdb',9,NULL),('sp_defaultlanguage',9,NULL),('sp_denylogin',9,NULL),('sp_grantlogin',9,NULL),('sp_revokelogin',9,NULL),('user_id',9,NULL),('sp_srvrolepermission',9,NULL),('sp_dbfixedrolepermission',9,NULL),('text',9,NULL),('ntext',9,NULL),('image',9,NULL),('textptr',9,NULL),('textvalid',9,NULL),('sp_addalias',9,10),('no_log',9,10),('truncate_only',9,10),('backup transaction',9,10),('dbcc concurrencyviolation',9,10),('sp_addgroup',9,10),('sp_changegroup',9,10),('sp_dropgroup',9,10),('sp_helpgroup',9,10),('sp_makewebtask',NULL,10),('sp_dropwebtask',NULL,10),('sp_runwebtask',NULL,10),('sp_enumcodepages',NULL,10),('dump',9,10),('load',9,10),('sp_articlesynctranprocs',NULL,10),('sp_diskdefault',NULL,10),('sp_eventlog',NULL,10) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT QUOTENAME(ss.name)+'.'+QUOTENAME(so.name) AS [ObjectName],tk.Keyword FROM sys.sql_modules sm (NOLOCK) INNER JOIN sys.objects so (NOLOCK) ON sm.[object_id]=so.[object_id] INNER JOIN sys.schemas ss (NOLOCK) ON so.[schema_id]=ss.[schema_id] CROSS JOIN @tblKeywords tk WHERE PATINDEX('%' + tk.Keyword + '%',LOWER(sm.[definition]) COLLATE DATABASE_DEFAULT)>1 AND OBJECTPROPERTY(sm.[object_id],'IsMSShipped')=0 END",
            "IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion/0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('sp_getmbcscharlen',NULL,10),('sp_helplog',NULL,10),('sp_helpsql',NULL,10),('sp_ismbcsleadbyte',NULL,10),('sp_lock2',NULL,10),('sp_msget_current_activity',NULL,10),('sp_msset_current_activity',NULL,10),('sp_msobjessearch',NULL,10),('xp_enum_activescriptengines',NULL,10),('xp_eventlog',NULL,10),('xp_getadmingroupname',NULL,10),('xp_getfiledetails',NULL,10),('xp_getlocalsystemaccountname',NULL,10),('xp_isntadmin',NULL,10),('xp_mslocalsystem',NULL,10),('xp_msnt2000',NULL,10),('xp_msplatform',NULL,10) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT QUOTENAME(ss.name)+'.'+QUOTENAME(so.name) AS [ObjectName],tk.Keyword FROM sys.sql_modules sm (NOLOCK) INNER JOIN sys.objects so (NOLOCK) ON sm.[object_id]=so.[object_id] INNER JOIN sys.schemas ss (NOLOCK) ON so.[schema_id]=ss.[schema_id] CROSS JOIN @tblKeywords tk WHERE PATINDEX('%' + tk.Keyword + '%',LOWER(sm.[definition]) COLLATE DATABASE_DEFAULT)>1 AND OBJECTPROPERTY(sm.[object_id],'IsMSShipped')=0 END",
            "IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion/0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('xp_setsecurity',NULL,10),('xp_varbintohexstr',NULL,10),('spt_datatype_info',NULL,10),('spt_datatype_info_ext',NULL,10),('spt_provider_types',NULL,10),('spt_server_info',NULL,10),('spt_values',NULL,10),('sysfulltextnotify ',NULL,10),('syslocks',NULL,10),('sysproperties',NULL,10),('sysprotects_aux',NULL,10),('sysprotects_view',NULL,10),('sysremote_catalogs',NULL,10),('sysremote_column_privileges',NULL,10),('sysremote_columns',NULL,10),('sysremote_foreign_keys',NULL,10) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT QUOTENAME(ss.name)+'.'+QUOTENAME(so.name) AS [ObjectName],tk.Keyword FROM sys.sql_modules sm (NOLOCK) INNER JOIN sys.objects so (NOLOCK) ON sm.[object_id]=so.[object_id] INNER JOIN sys.schemas ss (NOLOCK) ON so.[schema_id]=ss.[schema_id] CROSS JOIN @tblKeywords tk WHERE PATINDEX('%' + tk.Keyword + '%',LOWER(sm.[definition]) COLLATE DATABASE_DEFAULT)>1 AND OBJECTPROPERTY(sm.[object_id],'IsMSShipped')=0 END",
            "IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion/0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('sysremote_indexes',NULL,10),('sysremote_primary_keys',NULL,10),('sysremote_provider_types',NULL,10),('sysremote_schemata',NULL,10),('sysremote_statistics',NULL,10),('sysremote_table_privileges',NULL,10),('sysremote_tables',NULL,10),('sysremote_views',NULL,10),('syssegments',NULL,10),('sysxlogins',NULL,10),('sp_droptype',10,NULL),('@@remserver',10,NULL),('remote_proc_transactions',10,NULL),('sp_addumpdevice',10,NULL),('xp_grantlogin',10,NULL),('xp_revokelogin',10,NULL),('grant all',10,NULL),('deny all',10,NULL),('revoke all',10,NULL),('fn_virtualservernodes',10,NULL),('fn_servershareddrives',10,NULL),('writetext',10,NULL),('updatetext',10,NULL),('readtext',10,NULL),('torn_page_detection',10,NULL),('set rowcount',10,NULL),('dbo_only',9,11) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT QUOTENAME(ss.name)+'.'+QUOTENAME(so.name) AS [ObjectName],tk.Keyword FROM sys.sql_modules sm (NOLOCK) INNER JOIN sys.objects so (NOLOCK) ON sm.[object_id]=so.[object_id] INNER JOIN sys.schemas ss (NOLOCK) ON so.[schema_id]=ss.[schema_id] CROSS JOIN @tblKeywords tk WHERE PATINDEX('%' + tk.Keyword + '%',LOWER(sm.[definition]) COLLATE DATABASE_DEFAULT)>1 AND OBJECTPROPERTY(sm.[object_id],'IsMSShipped')=0 END",
            "IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion/0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('mediapassword',9,11 ),('password',9,11 ),('with append',10,11),('sp_dboption',9,11),('databaseproperty',9,11),('fastfirstrow',10,11),('sp_addserver',10,11 ),('sp_dropalias',9,11),('disable_def_cnst_chk',10,11),('sp_activedirectory_obj',NULL,11),('sp_activedirectory_scp',NULL,11),('sp_activedirectory_start',NULL,11),('sys.database_principal_aliases',NULL,11),('compute',10,11),('compute by',10,11),('sp_change_users_login',11,NULL),('sp_depends',11,NULL),('sp_getbindtoken',11,NULL),('sp_bindsession',11,NULL),('fmtonly',11,NULL),('raiserror',11,NULL),('sp_db_increased_partitions',11,NULL),('databasepropertyex(''isfulltextenabled'')',11,NULL),('sp_dbcmptlevel',11,NULL),('set ansi_nulls off',11,NULL),('set ansi_padding off',11,NULL),('set concat_null_yields_null off',11,NULL),('set offsets',11,NULL),('sys.numbered_procedures',12,NULL),('sys.numbered_procedure_parameters',12,NULL),('sys.sql_dependencies',12,NULL),('sp_db_vardecimal_storage_format',12,NULL),('sp_estimated_rowsize_reduction_for_vardecimal',12,NULL),('sp_trace_create',12,NULL),('sp_trace_setevent',12,NULL),('sp_trace_setstatus',12,NULL),('fn_trace_geteventinfo',12,NULL),('fn_trace_getfilterinfo',12,NULL),('fn_trace_gettable',12,NULL),('sys.traces',12,NULL),('sys.trace_events',12,NULL),('sys.trace_event_bindings',12,NULL),('sys.trace_categories',12,NULL),('sys.trace_columns',12,NULL),('sys.trace_subclass_values',12,NULL),('disable_interleaved_execution_tvf',10,15),('disable_batch_mode_memory_grant_feedback',10,15),('disable_batch_mode_adaptive_joins',10,15) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT QUOTENAME(ss.name)+'.'+QUOTENAME(so.name) AS [ObjectName],tk.Keyword FROM sys.sql_modules sm (NOLOCK) INNER JOIN sys.objects so (NOLOCK) ON sm.[object_id]=so.[object_id] INNER JOIN sys.schemas ss (NOLOCK) ON so.[schema_id]=ss.[schema_id] CROSS JOIN @tblKeywords tk WHERE PATINDEX('%' + tk.Keyword + '%',LOWER(sm.[definition]) COLLATE DATABASE_DEFAULT)>1 AND OBJECTPROPERTY(sm.[object_id],'IsMSShipped')=0 END"
          ],
          "transform": {
            "type": "aggregate",
            "group": "ObjectName",
            "map": {
              "Keyword": "join"
            }
          }
        }
      }
    ],
    "DeprecatedFeaturesJobs": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": [
            "USE [msdb]; IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion / 0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('disk init',NULL,9),('disk resize',NULL,9),('for load',NULL,9),('dbcc dbrepair',NULL,9),('dbcc newalloc',NULL,9),('dbcc pintable',NULL,9),('dbcc unpintable',NULL,9),('dbcc rowlock',NULL,9),('dbcc textall',NULL,9),('dbcc textalloc',NULL,9),('*=',NULL,9),('=*',NULL,9),('setuser',9,NULL),('sp_helpdevice',9,NULL),('sp_addtype',9,NULL),('sp_attach_db',9,NULL),('sp_attach_single_file_db',9,NULL),('sp_bindefault',9,NULL),('sp_unbindefault',9,NULL),('sp_bindrule',9,NULL),('sp_unbindrule',9,NULL),('create default',9,NULL),('drop default',9,NULL),('create rule',9,NULL),('drop rule',9,NULL),('sp_renamedb',9,NULL),('sp_resetstatus',9,NULL),('dbcc dbreindex',9,NULL),('dbcc indexdefrag',9,NULL),('dbcc showcontig',9,NULL),('sp_addextendedproc',9,NULL),('sp_dropextendedproc',9,NULL),('sp_helpextendedproc',9,NULL),('xp_loginconfig',1,NULL),('sp_fulltext_catalog',9,NULL),('sp_fulltext_table',9,NULL),('sp_fulltext_column',9,NULL),('sp_fulltext_database',9,NULL),('sp_help_fulltext_tables',9,NULL),('sp_help_fulltext_columns',9,NULL),('sp_help_fulltext_catalogs',9,NULL),('sp_help_fulltext_tables_cursor',9,NULL),('sp_help_fulltext_columns_cursor',9,NULL) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT 'Job: '+sj.[name]+' Step: '+sjs.step_name AS ObjectName,Keyword FROM msdb.dbo.sysjobsteps sjs (NOLOCK) INNER JOIN msdb.dbo.sysjobs sj (NOLOCK) ON sjs.job_id=sj.job_id CROSS JOIN @tblKeywords tk WHERE PATINDEX('%'+tk.Keyword+'%',LOWER(sjs.[command]) COLLATE DATABASE_DEFAULT)>1 AND sjs.[subsystem] IN ('TSQL','PowerShell'); END",
            "USE [msdb]; IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion / 0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('sp_help_fulltext_catalogs_cursor',9,NULL),('fn_get_sql',9,NULL),('sp_indexoption',9,NULL),('sp_lock',9,NULL),('indexkey_property',9,NULL),('file_id',9,NULL),('sp_certify_removable',9,NULL),('sp_create_removable',9,NULL),('sp_dbremove',9,NULL),('sp_addapprole',9,NULL),('sp_dropapprole',9,NULL),('sp_addlogin',9,NULL),('sp_droplogin',9,NULL),('sp_adduser',9,NULL),('sp_dropuser',9,NULL),('sp_grantdbaccess',9,NULL),('sp_revokedbaccess',9,NULL),('sp_addrole',9,NULL),('sp_droprole',9,NULL),('sp_approlepassword',9,NULL),('sp_password',9,NULL),('sp_changeobjectowner',9,NULL),('sp_defaultdb',9,NULL),('sp_defaultlanguage',9,NULL),('sp_denylogin',9,NULL),('sp_grantlogin',9,NULL),('sp_revokelogin',9,NULL),('user_id',9,NULL),('sp_srvrolepermission',9,NULL),('sp_dbfixedrolepermission',9,NULL),('text',9,NULL),('ntext',9,NULL),('image',9,NULL),('textptr',9,NULL),('textvalid',9,NULL),('sp_addalias',9,10),('no_log',9,10),('truncate_only',9,10),('backup transaction',9,10),('dbcc concurrencyviolation',9,10),('sp_addgroup',9,10),('sp_changegroup',9,10),('sp_dropgroup',9,10),('sp_helpgroup',9,10),('sp_makewebtask',NULL,10),('sp_dropwebtask',NULL,10),('sp_runwebtask',NULL,10),('sp_enumcodepages',NULL,10),('dump',9,10),('load',9,10),('sp_articlesynctranprocs',NULL,10),('sp_diskdefault',NULL,10),('sp_eventlog',NULL,10) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT 'Job: '+sj.[name]+' Step: '+sjs.step_name AS ObjectName,Keyword FROM msdb.dbo.sysjobsteps sjs (NOLOCK) INNER JOIN msdb.dbo.sysjobs sj (NOLOCK) ON sjs.job_id=sj.job_id CROSS JOIN @tblKeywords tk WHERE PATINDEX('%'+tk.Keyword+'%',LOWER(sjs.[command]) COLLATE DATABASE_DEFAULT)>1 AND sjs.[subsystem] IN ('TSQL','PowerShell'); END",
            "USE [msdb]; IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion / 0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('sp_getmbcscharlen',NULL,10),('sp_helplog',NULL,10),('sp_helpsql',NULL,10),('sp_ismbcsleadbyte',NULL,10),('sp_lock2',NULL,10),('sp_msget_current_activity',NULL,10),('sp_msset_current_activity',NULL,10),('sp_msobjessearch',NULL,10),('xp_enum_activescriptengines',NULL,10),('xp_eventlog',NULL,10),('xp_getadmingroupname',NULL,10),('xp_getfiledetails',NULL,10),('xp_getlocalsystemaccountname',NULL,10),('xp_isntadmin',NULL,10),('xp_mslocalsystem',NULL,10),('xp_msnt2000',NULL,10),('xp_msplatform',NULL,10) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT 'Job: '+sj.[name]+' Step: '+sjs.step_name AS ObjectName,Keyword FROM msdb.dbo.sysjobsteps sjs (NOLOCK) INNER JOIN msdb.dbo.sysjobs sj (NOLOCK) ON sjs.job_id=sj.job_id CROSS JOIN @tblKeywords tk WHERE PATINDEX('%'+tk.Keyword+'%',LOWER(sjs.[command]) COLLATE DATABASE_DEFAULT)>1 AND sjs.[subsystem] IN ('TSQL','PowerShell'); END",
            "USE [msdb]; IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion / 0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('xp_setsecurity',NULL,10),('xp_varbintohexstr',NULL,10),('spt_datatype_info',NULL,10),('spt_datatype_info_ext',NULL,10),('spt_provider_types',NULL,10),('spt_server_info',NULL,10),('spt_values',NULL,10),('sysfulltextnotify ',NULL,10),('syslocks',NULL,10),('sysproperties',NULL,10),('sysprotects_aux',NULL,10),('sysprotects_view',NULL,10),('sysremote_catalogs',NULL,10),('sysremote_column_privileges',NULL,10),('sysremote_columns',NULL,10),('sysremote_foreign_keys',NULL,10) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT 'Job: '+sj.[name]+' Step: '+sjs.step_name AS ObjectName,Keyword FROM msdb.dbo.sysjobsteps sjs (NOLOCK) INNER JOIN msdb.dbo.sysjobs sj (NOLOCK) ON sjs.job_id=sj.job_id CROSS JOIN @tblKeywords tk WHERE PATINDEX('%'+tk.Keyword+'%',LOWER(sjs.[command]) COLLATE DATABASE_DEFAULT)>1 AND sjs.[subsystem] IN ('TSQL','PowerShell'); END",
            "USE [msdb]; IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion / 0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('sysremote_indexes',NULL,10),('sysremote_primary_keys',NULL,10),('sysremote_provider_types',NULL,10),('sysremote_schemata',NULL,10),('sysremote_statistics',NULL,10),('sysremote_table_privileges',NULL,10),('sysremote_tables',NULL,10),('sysremote_views',NULL,10),('syssegments',NULL,10),('sysxlogins',NULL,10),('sp_droptype',10,NULL),('@@remserver',10,NULL),('remote_proc_transactions',10,NULL),('sp_addumpdevice',10,NULL),('xp_grantlogin',10,NULL),('xp_revokelogin',10,NULL),('grant all',10,NULL),('deny all',10,NULL),('revoke all',10,NULL),('fn_virtualservernodes',10,NULL),('fn_servershareddrives',10,NULL),('writetext',10,NULL),('updatetext',10,NULL),('readtext',10,NULL),('torn_page_detection',10,NULL),('set rowcount',10,NULL),('dbo_only',9,11 ) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT 'Job: '+sj.[name]+' Step: '+sjs.step_name AS ObjectName,Keyword FROM msdb.dbo.sysjobsteps sjs (NOLOCK) INNER JOIN msdb.dbo.sysjobs sj (NOLOCK) ON sjs.job_id=sj.job_id CROSS JOIN @tblKeywords tk WHERE PATINDEX('%'+tk.Keyword+'%',LOWER(sjs.[command]) COLLATE DATABASE_DEFAULT)>1 AND sjs.[subsystem] IN ('TSQL','PowerShell'); END",
            "USE [msdb]; IF (SELECT COUNT(instance_name) FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Deprecated Features%' AND cntr_value>0)>0 BEGIN DECLARE @sqlmajorver INT; SELECT @sqlmajorver=CONVERT(int,(@@microsoftversion / 0x1000000) & 0xff); DECLARE @tblKeywords as TABLE (KeywordID int IDENTITY(1,1) PRIMARY KEY, Keyword VARCHAR(64), DeprecatedIn tinyint, DiscontinuedIn tinyint) INSERT INTO @tblKeywords VALUES ('mediapassword',9,11 ),('password',9,11 ),('with append',10,11),('sp_dboption',9,11),('databaseproperty',9,11),('fastfirstrow',10,11),('sp_addserver',10,11 ),('sp_dropalias',9,11),('disable_def_cnst_chk',10,11),('sp_activedirectory_obj',NULL,11),('sp_activedirectory_scp',NULL,11),('sp_activedirectory_start',NULL,11),('sys.database_principal_aliases',NULL,11),('compute',10,11),('compute by',10,11),('sp_change_users_login',11,NULL),('sp_depends',11,NULL),('sp_getbindtoken',11,NULL),('sp_bindsession',11,NULL),('fmtonly',11,NULL),('raiserror',11,NULL),('sp_db_increased_partitions',11,NULL),('databasepropertyex(''isfulltextenabled'')',11,NULL),('sp_dbcmptlevel',11,NULL),('set ansi_nulls off',11,NULL),('set ansi_padding off',11,NULL),('set concat_null_yields_null off',11,NULL),('set offsets',11,NULL),('sys.numbered_procedures',12,NULL),('sys.numbered_procedure_parameters',12,NULL),('sys.sql_dependencies',12,NULL),('sp_db_vardecimal_storage_format',12,NULL),('sp_estimated_rowsize_reduction_for_vardecimal',12,NULL),('sp_trace_create',12,NULL),('sp_trace_setevent',12,NULL),('sp_trace_setstatus',12,NULL),('fn_trace_geteventinfo',12,NULL),('fn_trace_getfilterinfo',12,NULL),('fn_trace_gettable',12,NULL),('sys.traces',12,NULL),('sys.trace_events',12,NULL),('sys.trace_event_bindings',12,NULL),('sys.trace_categories',12,NULL),('sys.trace_columns',12,NULL),('sys.trace_subclass_values',12,NULL),('sp_addremotelogin',10,14),('sp_dropremotelogin',10,14),('sp_helpremotelogin',10,14),('sp_remoteoption',10,14) DELETE FROM @tblKeywords WHERE DeprecatedIn>@sqlmajorver OR DiscontinuedIn>@sqlmajorver SELECT 'Job: '+sj.[name]+' Step: '+sjs.step_name AS ObjectName,Keyword FROM msdb.dbo.sysjobsteps sjs (NOLOCK) INNER JOIN msdb.dbo.sysjobs sj (NOLOCK) ON sjs.job_id=sj.job_id CROSS JOIN @tblKeywords tk WHERE PATINDEX('%'+tk.Keyword+'%',LOWER(sjs.[command]) COLLATE DATABASE_DEFAULT)>1 AND sjs.[subsystem] IN ('TSQL','PowerShell'); END"
          ],
          "transform": {
            "type": "aggregate",
            "group": "ObjectName",
            "map": {
              "Keyword": "join"
            }
          }
        }
      }
    ],
    "AffinityNUMANodeNoAssignedCPUs": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": "Windows",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "WITH cpuCTE (node, afin) AS (SELECT DISTINCT(parent_node_id), is_online FROM sys.dm_os_schedulers WHERE scheduler_id < 255 AND parent_node_id < 64 GROUP BY parent_node_id, is_online) SELECT COUNT(DISTINCT(node)) AS NodeCnt FROM cpuCTE WHERE afin = 0 AND node NOT IN ( SELECT DISTINCT(node) FROM cpuCTE WHERE afin = 1)"
        }
      }
    ],
    "IndexesGuidKeyColumns": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT ss.[name]+'.'+t.[name]+'.'+i.[name] as IndexName FROM [sys].[indexes] AS i INNER JOIN [sys].[tables] AS t ON t.[object_id]=i.[object_id] INNER JOIN [sys].[schemas] ss ON ss.[schema_id]=t.[schema_id] INNER JOIN [sys].[index_columns] AS sic ON sic.[object_id]=t.[object_id] AND sic.index_id=i.index_id INNER JOIN [sys].[columns] AS sc ON sc.[object_id]=t.[object_id] AND sc.column_id=sic.column_id INNER JOIN [sys].[types] AS sty ON sc.user_type_id=sty.user_type_id WHERE sic.is_included_column=0 AND sty.name='uniqueidentifier' and i.type=1 AND i.is_unique_constraint=0 AND t.is_ms_shipped=0 GROUP BY ss.name,t.[name],i.name HAVING COUNT(sty.name)>0",
          "transform": {
            "type": "aggregate",
            "map": {
              "IndexName": "join"
            }
          }
        }
      }
    ],
    "SuspectPagesValidation": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "IF (SELECT COUNT(*) FROM msdb.dbo.suspect_pages WHERE (event_type = 1 OR event_type = 2 OR event_type = 3)) > 0 BEGIN SELECT CASE event_type WHEN 1 THEN 'Error 823 or unspecified Error 824' WHEN 2 THEN 'Bad Checksum' WHEN 3 THEN 'Torn Page' ELSE NULL END AS [EventType] FROM msdb.dbo.suspect_pages (NOLOCK) WHERE (event_type = 1 OR event_type = 2 OR event_type = 3) AND DB_NAME(database_id)=(@TargetName) END;"
        }
      }
    ],
    "SparseFilesValidation": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "IF (SELECT COUNT(sd.database_id) FROM sys.databases sd INNER JOIN sys.master_files smf ON sd.database_id = smf.database_id WHERE sd.source_database_id IS NULL AND smf.is_sparse = 1) > 0 BEGIN SELECT 'Database_checks' AS [Category], 'DB_nonSnap_Sparse' AS [Information], DB_NAME(sd.database_id) AS database_name, smf.name AS [SparseFiles], smf.physical_name FROM sys.databases sd INNER JOIN sys.master_files smf ON sd.database_id = smf.database_id WHERE sd.source_database_id IS NULL AND smf.is_sparse = 1 AND DB_NAME(sd.database_id)=@TargetName END;"
        }
      }
    ],
    "TableIndexes": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT s.name+'.'+t.name AS TableName, COUNT(si.index_id) AS IndexCount, MIN(si.index_id) AS MinIndexId, MAX(si.index_id) AS MaxIndexId FROM sys.indexes AS si (NOLOCK) INNER JOIN sys.tables AS t (NOLOCK) ON si.[object_id]=t.[object_id] INNER JOIN sys.schemas AS s (NOLOCK) ON s.[schema_id]=t.[schema_id] WHERE si.is_hypothetical=0 GROUP BY s.name,t.name"
        }
      }
    ],
    "TableIndexesPartitioned": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT DISTINCT s.name+'.'+t.name AS TableName, i.name AS IndexName FROM sys.tables AS t (NOLOCK) INNER JOIN sys.indexes AS i (NOLOCK) ON t.[object_id]=i.[object_id] INNER JOIN sys.data_spaces AS ds (NOLOCK) ON ds.data_space_id=i.data_space_id INNER JOIN sys.schemas AS s (NOLOCK) ON s.[schema_id]=t.[schema_id] WHERE t.[type]='U' AND i.[type] IN (1,2) AND i.is_hypothetical=0 AND t.name IN(SELECT ob.name FROM sys.tables AS ob (NOLOCK) INNER JOIN sys.indexes AS ind (NOLOCK) ON ind.[object_id]=ob.[object_id] INNER JOIN sys.data_spaces AS sds (NOLOCK) ON sds.data_space_id=ind.data_space_id WHERE sds.[type]='PS' GROUP BY ob.name) AND ds.[type]<>'PS'"
        }
      }
    ],
    "NullPassword": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT RTRIM(name) AS [PasswordData] FROM master.sys.sql_logins WHERE [password_hash] IS NULL AND name NOT IN ('MSCRMSqlClrLogin','##MS_SmoExtendedSigningCertificate##','##MS_PolicySigningCertificate##','##MS_SQLResourceSigningCertificate##','##MS_SQLReplicationSigningCertificate##','##MS_SQLAuthenticatorCertificate##','##MS_AgentSigningCertificate##','##MS_SQLEnableSystemAssemblyLoadingUser##')",
          "transform": {
            "type": "aggregate",
            "map": {
              "PasswordData": "join"
            }
          }
        }
      }
    ],
    "NamePassword": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises, ManagedInstance",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT DISTINCT RTRIM(s.name) AS [PasswordData] FROM master.sys.sql_logins s WHERE PWDCOMPARE(RTRIM(RTRIM(s.name)), s.[password_hash]) = 1",
          "transform": {
            "type": "aggregate",
            "map": {
              "PasswordData": "join"
            }
          }
        }
      }
    ],
    "SystemHealth": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "IF EXISTS (SELECT [object_id] FROM tempdb.sys.objects (NOLOCK) WHERE [object_id]=OBJECT_ID('tempdb.dbo.#SystemHealthSessionData')) DROP TABLE #SystemHealthSessionData; IF NOT EXISTS (SELECT [object_id] FROM tempdb.sys.objects (NOLOCK) WHERE [object_id]=OBJECT_ID('tempdb.dbo.#SystemHealthSessionData')) CREATE TABLE #SystemHealthSessionData (target_data XML); INSERT INTO #SystemHealthSessionData SELECT CAST(xet.target_data AS XML) FROM sys.dm_xe_session_targets xet INNER JOIN sys.dm_xe_sessions xe ON xe.address=xet.event_session_address WHERE xe.name='system_health' IF (SELECT COUNT(*) FROM #SystemHealthSessionData a WHERE CONVERT(VARCHAR(max), target_data) LIKE '%error_reported%')>0 BEGIN ;WITH cteHealthSession (EventXML) AS (SELECT C.query('.') EventXML FROM #SystemHealthSessionData a CROSS APPLY a.target_data.nodes('/RingBufferTarget/event') AS T(C)),cteErrorReported (EventTime, ErrorNumber) AS (SELECT EventXML.value('(/event/@timestamp)[1]','datetime') AS EventTime,EventXML.value('(/event/data[@name=''error_number'']/value)[1]','int') AS ErrorNumber FROM cteHealthSession WHERE EventXML.value('(/event/@name)[1]','VARCHAR(500)')='error_reported') SELECT ErrorNumber AS [Error_Number], DATEDIFF(hour,MAX(EventTime),GETUTCDATE()) AS [Last_Logged_Days_Ago],COUNT(ErrorNumber) AS Error_Count FROM cteErrorReported a INNER JOIN sys.messages b ON a.ErrorNumber=b.message_id WHERE b.language_id=1033 GROUP BY a.ErrorNumber, b.[text] END"
        }
      }
    ],
    "CompatibilityLevel": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT compatibility_level as [CompatibilityLevel] FROM sys.databases where name=@TargetName"
        }
      }
    ],
    "PendingIORequests": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DECLARE @IOCnt INT SET @IOCnt=1 WHILE @IOCnt<5 BEGIN IF EXISTS(SELECT * FROM sys.dm_io_pending_io_requests WHERE io_type=@io_type) BREAK; WAITFOR DELAY '00:00:01' SET @IOCnt=@IOCnt+1 END; IF @IOCnt<5 SELECT 1"
        }
      }
    ],
    "DBMetaInfo": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DBCC DBINFO(@TargetName) WITH TABLERESULTS,NO_INFOMSGS",
          "transform": {
            "type": "dbInfo"
          }
        }
      }
    ],
    "StatSamplingRate": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT CONCAT( sh.[name], '.', o.[name] ) AS FullName, CAST(sp.rows_sampled/(sp.[rows]*1.00) AS DECIMAL(5,2)) AS stat_sampling_rate FROM sys.objects AS o INNER JOIN sys.tables AS mst ON mst.[object_id] = o.[object_id] INNER JOIN sys.stats AS ss ON ss.[object_id] = o.[object_id] INNER JOIN sys.schemas AS sh ON sh.[schema_id] = o.[schema_id] CROSS APPLY sys.dm_db_stats_properties(o.[object_id], ss.[stats_id]) AS sp WHERE sp.[rows] > 0 AND sp.rows_sampled/(sp.[rows]*1.00) < @threshold"
        }
      }
    ],
    "IndexStatistics": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,12.0)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT CASE si.type WHEN 0 THEN CONCAT(t.[name],'.',mst.[name],' (HEAP)') ELSE CONCAT(t.[name],'.',mst.[name],'.',si.name) END AS IndexFullName,index_stat.fragmentation,index_stat.page_count,si.type AS IndexType FROM sys.indexes si INNER JOIN sys.partitions sp ON si.[object_id]=sp.[object_id] AND si.index_id=sp.index_id INNER JOIN sys.tables AS mst ON mst.[object_id]=si.[object_id] INNER JOIN sys.schemas AS t ON t.[schema_id]=mst.[schema_id] LEFT JOIN (SELECT ps.database_id,ps.[object_id],ps.index_id,ps.partition_number,SUM(ps.avg_fragmentation_in_percent) AS fragmentation,SUM(ps.page_count) [page_count] FROM sys.dm_db_index_physical_stats(DB_ID(@TargetName),NULL,NULL,NULL,NULL) ps WHERE ps.index_level=0 AND ps.alloc_unit_type_desc='IN_ROW_DATA' GROUP BY ps.database_id,ps.[object_id],ps.index_id,ps.partition_number,ps.record_count,ps.forwarded_record_count) index_stat on index_stat.[object_id]=si.[object_id] AND index_stat.index_id=si.index_id AND index_stat.[partition_number]=sp.partition_number WHERE mst.is_ms_shipped=0 AND si.[type] IN (0,1,2)"
        }
      },
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[12.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT CASE si.type WHEN 0 THEN CONCAT(t.[name],'.',mst.[name],' (HEAP)') ELSE CONCAT(t.[name],'.',mst.[name],'.',si.name) END AS IndexFullName,ISNULL(index_stat.fragmentation,0) AS fragmentation, ISNULL(index_stat.page_count,0) AS page_count,index_stat_ci.fragmentation_CI,index_stat_ci.state,si.type AS IndexType FROM sys.indexes si INNER JOIN sys.partitions sp ON si.[object_id]=sp.[object_id] AND si.index_id=sp.index_id INNER JOIN sys.tables AS mst ON mst.[object_id]=si.[object_id] INNER JOIN sys.schemas AS t ON t.[schema_id]=mst.[schema_id] LEFT JOIN (SELECT ps.database_id,ps.[object_id],ps.index_id,ps.partition_number,SUM(ps.avg_fragmentation_in_percent) AS fragmentation,SUM(ps.page_count) [page_count] FROM sys.dm_db_index_physical_stats(DB_ID(@TargetName),NULL,NULL,NULL,NULL) ps WHERE ps.index_level=0 AND ps.alloc_unit_type_desc='IN_ROW_DATA' GROUP BY ps.database_id,ps.[object_id],ps.index_id,ps.partition_number,ps.record_count,ps.forwarded_record_count) index_stat on index_stat.[object_id]=si.[object_id] AND index_stat.index_id=si.index_id AND index_stat.[partition_number]=sp.partition_number LEFT JOIN (SELECT rg.object_id,rg.index_id,rg.partition_number,SUM((ISNULL(rg.deleted_rows,1)*100)/CASE WHEN rg.total_rows=0 THEN 1 ELSE rg.total_rows END) AS [fragmentation_CI],rg.[state] FROM sys.column_store_row_groups rg GROUP BY rg.object_id,rg.index_id,rg.partition_number,rg.total_rows,rg.delta_store_hobt_id,rg.row_group_id,rg.state) index_stat_ci on index_stat_ci.[object_id]=si.[object_id] AND index_stat_ci.index_id=si.index_id AND index_stat_ci.[partition_number]=sp.[partition_number] WHERE mst.is_ms_shipped=0 AND si.[type] IN (0,1,2,5,6,7)"
        }
      }
    ],
    "XTPIndexHashStatistics": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[12.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "IF NOT EXISTS(SELECT * FROM sys.filegroups where [type]='FX') RETURN; DECLARE @tmpXIS TABLE([object_id] int,[schema_name] VARCHAR(100) COLLATE database_default,[table_name] VARCHAR(300) COLLATE database_default,[index_id] int,[index_name] VARCHAR(300) COLLATE database_default,total_bucket_count bigint,empty_bucket_count bigint,avg_chain_length bigint,max_chain_length bigint, KeyCols VARCHAR(4000) COLLATE database_default,DistinctCnt bigint NULL,isdone bit) INSERT INTO @tmpXIS SELECT xis.[object_id],t.name,o.name,xis.index_id,si.name,xhis.total_bucket_count,xhis.empty_bucket_count,xhis.avg_chain_length,xhis.max_chain_length,SUBSTRING((SELECT ','+ac.name FROM sys.tables AS st INNER JOIN sys.indexes AS i ON st.[object_id]=i.[object_id] INNER JOIN sys.index_columns AS ic ON i.[object_id]=ic.[object_id] AND i.[index_id]=ic.[index_id] INNER JOIN sys.all_columns AS ac ON st.[object_id]=ac.[object_id] AND ic.[column_id]=ac.[column_id] WHERE si.[object_id]=i.[object_id] AND si.index_id=i.index_id AND ic.is_included_column=0 ORDER BY ic.key_ordinal FOR XML PATH('')),2,8000) AS KeyCols,NULL distinctCntOUT,0 FROM sys.dm_db_xtp_hash_index_stats AS xhis INNER JOIN sys.dm_db_xtp_index_stats AS xis ON xis.[object_id]=xhis.[object_id] AND xis.[index_id]=xhis.[index_id] INNER JOIN sys.indexes AS si (NOLOCK) ON xis.[object_id]=si.[object_id] AND xis.[index_id]=si.[index_id] INNER JOIN sys.objects AS o (NOLOCK) ON si.[object_id]=o.[object_id] INNER JOIN sys.tables AS mst (NOLOCK) ON mst.[object_id]=o.[object_id] INNER JOIN sys.schemas AS t (NOLOCK) ON t.[schema_id]=mst.[schema_id] WHERE o.[type]='U' DECLARE @objectid int,@indexid int,@sqlcmd NVARCHAR(4000),@params NVARCHAR(500),@schema_name VARCHAR(100),@table_name VARCHAR(300),@KeyCols VARCHAR(4000),@distinctCnt bigint IF EXISTS (SELECT TOP 1 [object_id] FROM @tmpXIS WHERE isdone=0) BEGIN WHILE (SELECT COUNT([object_id]) FROM @tmpXIS WHERE isdone=0)>0 BEGIN SELECT TOP 1 @objectid=[object_id],@indexid=[index_id],@schema_name=[schema_name],@table_name=[table_name],@KeyCols=KeyCols FROM @tmpXIS WHERE isdone=0 SELECT @sqlcmd='SELECT @distinctCntOUT=COUNT(*) FROM (SELECT DISTINCT '+@KeyCols+' FROM '+@schema_name+'.'+@table_name+') t1;' EXECUTE sp_executesql @sqlcmd,N'@distinctCntOUT bigint OUTPUT',@distinctCntOUT=@distinctCnt OUTPUT UPDATE @tmpXIS SET DistinctCnt=@distinctCnt,isdone=1 WHERE [object_id]=@objectid AND [index_id]=@indexid; END; END; SELECT CONCAT([schema_name],'.',table_name,'.',index_name) AS IndexFullName,FLOOR((CAST(empty_bucket_count AS FLOAT)/total_bucket_count)*100) EmptyBucketPct,total_bucket_count,avg_chain_length,DistinctCnt FROM @tmpXIS"
        }
      }
    ],
    "XTPNonClusteredIndexHashStatistics": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[12.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT DISTINCT CONCAT(t.name,'.',o.name,'.',si.name) AS IndexFullName,FLOOR((CAST(page_update_retry_count AS FLOAT)/CASE WHEN page_update_count=0 THEN 1 ELSE page_update_count END)*100) AS page_update_count_pct,FLOOR((CAST(page_consolidation_retry_count AS FLOAT)/CASE WHEN page_consolidation_count=0 THEN 1 ELSE page_consolidation_count END)*100) AS page_consolidation_count_pct,FLOOR((CAST(page_split_retry_count AS FLOAT)/CASE WHEN page_split_count=0 THEN 1 ELSE page_split_count END)*100) AS page_split_count_pct,FLOOR((CAST(key_split_retry_count AS FLOAT)/CASE WHEN key_split_count=0 THEN 1 ELSE key_split_count END)*100) AS key_split_count_pct,FLOOR((CAST(page_merge_retry_count AS FLOAT)/CASE WHEN page_merge_count=0 THEN 1 ELSE page_merge_count END)*100) AS page_merge_count_pct,FLOOR((CAST(key_merge_retry_count AS FLOAT)/CASE WHEN key_merge_count=0 THEN 1 ELSE key_merge_count END)*100) AS key_merge_count_pct FROM sys.dm_db_xtp_nonclustered_index_stats AS xnis (NOLOCK) INNER JOIN sys.dm_db_xtp_index_stats AS xis (NOLOCK) ON xis.[object_id]=xnis.[object_id] AND xis.[index_id]=xnis.[index_id] INNER JOIN sys.indexes AS si (NOLOCK) ON xis.[object_id]=si.[object_id] AND xis.[index_id]=si.[index_id] INNER JOIN sys.objects AS o (NOLOCK) ON si.[object_id]=o.[object_id] INNER JOIN sys.tables AS mst (NOLOCK) ON mst.[object_id]=o.[object_id] INNER JOIN sys.schemas AS t (NOLOCK) ON t.[schema_id]=mst.[schema_id] WHERE o.[type]='U'"
        }
      }
    ],
    "CpuUsage": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "DECLARE @ts_now bigint;SELECT @ts_now=ms_ticks FROM sys.dm_os_sys_info (NOLOCK);SELECT 100-ISNULL(SystemIdle,0) AS AVGTotalCPUUsage,AVGSQLCPUUsage,100-ISNULL(SystemIdle,0)-AVGSQLCPUUsage AS AVGCPUUsageByOther FROM(SELECT AVG(SystemIdle) AS SystemIdle,AVG(SQLProcessUtilization) AS AVGSQLCPUUsage FROM(SELECT record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]','int') AS SystemIdle,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]','int') AS SQLProcessUtilization,[TIMESTAMP] FROM (SELECT [TIMESTAMP],CONVERT(xml,record) AS record FROM sys.dm_os_ring_buffers (NOLOCK) WHERE ring_buffer_type=N'RING_BUFFER_SCHEDULER_MONITOR' AND record LIKE '%<SystemHealth>%' AND @ts_now-[TIMESTAMP]<=7200000) AS xrb ) AS si) AS a"
        }
      }
    ],
    "TF6533SpatialFunctionsUsage": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT DISTINCT 1 AS InUse FROM sys.sql_modules (NOLOCK) WHERE OBJECTPROPERTY([object_id],'IsMSShipped')=0 AND (PATINDEX('%.strelate(%',LOWER([definition]) COLLATE DATABASE_DEFAULT)>1 OR PATINDEX('%.stasbinary(%',LOWER([definition]) COLLATE DATABASE_DEFAULT)>1)",
          "transform": {
            "type": "noData",
            "define": {
              "InUse": 0
            }
          }
        }
      }
    ],
    "FKNotTrusted": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT CONCAT(QUOTENAME(t.name),'.',QUOTENAME(mst.name),'.',QUOTENAME(FKC.name)) AS [constraint_name] FROM sys.foreign_keys FKC (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON FKC.parent_object_id=o.[object_id] INNER JOIN sys.tables mst (NOLOCK) ON mst.[object_id]=o.[object_id] INNER JOIN sys.schemas t (NOLOCK) ON t.[schema_id]=mst.[schema_id] WHERE o.type='U' AND FKC.is_not_trusted=1 AND FKC.is_not_for_replication=0 GROUP BY o.[schema_id],mst.[object_id],FKC.name,t.name,mst.name UNION ALL SELECT CONCAT(QUOTENAME(t.name),'.',QUOTENAME(mst.name),'.',QUOTENAME(CC.name)) FROM sys.check_constraints CC (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON CC.parent_object_id=o.[object_id] INNER JOIN sys.tables mst (NOLOCK) ON mst.[object_id]=o.[object_id] INNER JOIN sys.schemas t (NOLOCK) ON t.[schema_id]=mst.[schema_id] WHERE o.type='U' AND CC.is_not_trusted=1 AND CC.is_not_for_replication=0 AND CC.is_disabled=0 GROUP BY t.[schema_id],mst.[object_id],CC.name,t.name,mst.name",
          "transform": {
            "type": "aggregate",
            "map": {
              "constraint_name": "join"
            }
          }
        }
      }
    ],
    "ObjectStatistics": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0.3000,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT DISTINCT CONCAT(t.name,'.',OBJECT_NAME(mst.[object_id])) AS [TableName],ss.name AS [StatName],sp.[rows],sp.modification_counter,sp.rows_sampled FROM sys.objects AS o INNER JOIN sys.tables AS mst ON mst.[object_id]=o.[object_id] INNER JOIN sys.schemas AS t ON t.[schema_id]=mst.[schema_id] INNER JOIN sys.stats AS ss ON ss.[object_id]=mst.[object_id] CROSS APPLY sys.dm_db_stats_properties(ss.[object_id],ss.[stats_id]) AS sp WHERE sp.[rows]>0"
        }
      },
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0, 11.0.3000)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT DISTINCT CONCAT(t.name,'.',OBJECT_NAME(mst.[object_id])) AS [TableName],ss.name AS [StatName],SUM(p.[rows]) AS [rows],si.rowmodctr AS modification_counter,0 AS rows_sampled AS FROM sys.sysindexes AS si INNER JOIN sys.objects AS o ON si.id=o.[object_id] INNER JOIN sys.tables AS mst ON mst.[object_id]=o.[object_id] INNER JOIN sys.schemas AS t ON t.[schema_id]=mst.[schema_id] INNER JOIN sys.stats AS ss ON ss.[object_id]=o.[object_id] INNER JOIN sys.partitions AS p ON p.[object_id]=ss.[object_id] LEFT JOIN sys.indexes i ON si.id=i.[object_id] AND si.indid=i.index_id WHERE o.type<>'S' AND i.name IS NOT NULL GROUP BY mst.[object_id],t.name,rowmodctr,ss.name HAVING SUM(p.[rows])>0"
        }
      }
    ],
    "FullTextServiceInfo": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT ISNULL(FULLTEXTSERVICEPROPERTY('IsFulltextInstalled'), 0) AS [IsFulltextInstalled] ,FULLTEXTSERVICEPROPERTY('VerifySignature') AS [VerifySignature] ,FULLTEXTSERVICEPROPERTY('LoadOSResources') AS [LoadOSResources];"
        }
      }
    ],
    "IsClusteredServer": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT SERVERPROPERTY('IsClustered') AS is_clustered_server"
        }
      }
    ],
    "MisalignedDiskPartition": [
      {
        "type": "WMI",
        "target": {
          "type": "Server",
          "platform": "Windows",
          "engineEdition": "OnPremises",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT Name, StartingOffset FROM Win32_DiskPartition WHERE StartingOffset < $threshold"
        }
      }
    ],
    "NtfsBlockSize": [
      {
        "type": "WMI",
        "target": {
          "type": "Server",
          "platform": "Windows",
          "engineEdition": "OnPremises",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT name, blocksize FROM Win32_Volume WHERE Capacity <> NULL"
        }
      }
    ],
    "OsSysMemory": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT * FROM sys.dm_os_sys_memory(NOLOCK)"
        }
      }
    ],
    "PageFileManagement": [
      {
        "type": "Registry",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": "Windows",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": {
            "HKEY_LOCAL_MACHINE": {
              "System\\CurrentControlSet\\Control\\Session Manager\\Memory Management": [
                "PagingFiles"
              ]
            }
          }
        }
      }
    ],
    "PowerPlan": [
      {
        "type": "Registry",
        "target": {
          "type": "Server",
          "platform": "Windows",
          "engineEdition": "OnPremises",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": {
            "HKEY_LOCAL_MACHINE": {
              "SOFTWARE\\Policies\\Microsoft\\Power\\PowerSettings": [
                "ActivePowerScheme"
              ],
              "SYSTEM\\CurrentControlSet\\Control\\Power\\User\\PowerSchemes": [
                "ActivePowerScheme"
              ]
            }
          }
        }
      }
    ],
    "ProcessBlockingChains": [
      {
        "type": "SQL",
        "target": {
          "type": "Database",
          "version": "[11.0,)",
          "platform": [
            "Windows",
            "Linux"
          ],
          "engineEdition": "OnPremises"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT es.[session_id] AS [blocked_spid], es.[status] AS [blocked_spid_status], ot.task_state AS [blocked_task_status], COALESCE ( owt.wait_duration_ms, ABS(CONVERT(BIGINT,(DATEDIFF(ms, es.last_request_start_time, GETDATE())))) ) / 60000 AS [block_time_min] FROM sys.dm_exec_sessions es LEFT OUTER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id LEFT OUTER JOIN sys.dm_exec_connections ec ON es.session_id = ec.session_id LEFT OUTER JOIN sys.dm_os_waiting_tasks wt ON es.session_id = wt.session_id LEFT OUTER JOIN sys.dm_os_tasks ot ON er.session_id = ot.session_id AND er.request_id = ot.request_id LEFT OUTER JOIN ( SELECT waiting_task_address, wait_duration_ms, ROW_NUMBER() OVER (PARTITION BY waiting_task_address ORDER BY wait_duration_ms DESC) AS row_num FROM sys.dm_os_waiting_tasks WHERE wait_type <> 'SP_SERVER_DIAGNOSTICS_SLEEP' ) owt ON ot.task_address = owt.waiting_task_address AND owt.row_num = 1 OUTER APPLY sys.dm_exec_sql_text(COALESCE(er.sql_handle, ec.most_recent_sql_handle)) AS query WHERE CONVERT(VARCHAR(max), query.text) not like '%sp_server_diagnostics%' AND (es.session_id <> @@SPID AND es.is_user_process = 1) AND (es.session_id IN (SELECT er3.blocking_session_id FROM sys.dm_exec_requests er3) OR er.blocking_session_id IS NOT NULL) AND ((owt.wait_duration_ms/1000) > @waitThreshold OR (er.total_elapsed_time/1000) > @waitThreshold OR er.total_elapsed_time IS NULL) AND er.database_id = DB_ID(@TargetName)"
        }
      }
    ],
    "ReplicationInfo": [
      {
        "type": "Registry",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": "Windows",
          "version": "[11.0,)"
        },
        "implementation": {
          "instance": true,
          "query": {
            "HKEY_LOCAL_MACHINE": {
              "SOFTWARE\\Microsoft\\MSSQLServer\\Replication": [
                "IsInstalled"
              ]
            }
          }
        }
      }
    ],
    "ServerBIOSInfo": [
      {
        "type": "Registry",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": "Windows",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": {
            "HKEY_LOCAL_MACHINE": {
              "HARDWARE\\DESCRIPTION\\System\\BIOS": [
                "BIOSVendor"
              ]
            }
          }
        }
      }
    ],
    "ServerCPUInfo": [
      {
        "type": "Registry",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": "Windows",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": {
            "HKEY_LOCAL_MACHINE": {
              "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\*": [
                "ProcessorNameString"
              ]
            }
          },
          "transform": {
            "type": "rename",
            "map": {
              "CPUid": "RegistryKeyName"
            }
          }
        }
      }
    ],
    "SysConfiguration": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "useDatabase": true,
          "query": "SELECT [name], [value] FROM sys.configurations",
          "transform": {
            "type": "nameValuePairs",
            "keyColumn": "name",
            "valueColumn": "value",
            "map": {
              "allow updates": "allow_updates",
              "Ad Hoc Distributed Queries": "ad_hoc_distributed_queries",
              "affinity mask": "affinity_mask",
              "affinity I/O mask": "affinity_io_mask",
              "affinity64 mask": "affinity64_mask",
              "affinity64 I/O mask": "affinity64_io_mask",
              "automatic soft-NUMA disabled": "automatic_soft_NUMA_disabled",
              "backup compression default": "backup_compression",
              "blocked process threshold (s)": "block_threshold",
              "clr enabled": "clr_enabled",
              "cost threshold for parallelism": "cost_threshold_for_parallelism",
              "cross db ownership chaining": "cross_db_ownership_chaining",
              "default trace enabled": "default_trace_enabled",
              "index create memory (KB)": "index_create_memory",
              "lightweight pooling": "lightweight_pooling",
              "locks": "locks",
              "max worker threads": "max_worker_threads",
              "max degree of parallelism": "max_dop",
              "min memory per query (KB)": "min_memory_per_query",
              "network packet size (B)": "network_packet_size",
              "Ole Automation Procedures": "ole_automation_procedures",
              "optimize for ad hoc workloads": "optimize_for_ad_hoc_workloads",
              "priority boost": "priority_boost",
              "query wait (s)": "query_wait",
              "recovery interval (min)": "recovery_interval",
              "remote admin connections": "remote_admin_connections",
              "remote query timeout (s)": "remote_query_timeout",
              "scan for startup procs": "startup_stored_procedures",
              "xp_cmdshell": "xp_cmdshell"
            }
          }
        }
      }
    ],
    "SysDmOsHostInfo": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": "Windows",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT N'Windows' AS [host_platform] ,CASE WHEN [windows_release] IN ( '6.3' ,'10.0' ) AND ( @@VERSION LIKE N'%Build 10586%' OR @@VERSION LIKE N'%Build 14393%' ) THEN N'10.0' ELSE [windows_release] END AS [host_release] ,CASE WHEN @@VERSION LIKE '%<X64>%' THEN 64 ELSE 32 END AS [host_architecture] FROM sys.dm_os_windows_info(NOLOCK)",
          "transform": {
            "type": "parse",
            "map": {
              "host_release": "/^(?<major>\\d+)\\.(?<minor>\\d+)(?:\\.(?<build>\\d+))?(?:\\.(?<revision>\\d+))?$/x"
            }
          }
        }
      },
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": "Linux",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT [host_platform] AS [host_platform] ,[host_release] AS [host_release] ,64 AS [host_architecture] FROM sys.dm_os_host_info(NOLOCK)",
          "transform": {
            "type": "parse",
            "map": {
              "host_release": "/^(?<major>\\d+)\\.(?<minor>\\d+)(?:\\.(?<build>\\d+))?(?:\\.(?<revision>\\d+))?$/x"
            }
          }
        }
      }
    ],
    "SysDmOsProcessMemory": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT locked_page_allocations_kb FROM sys.dm_os_process_memory (NOLOCK)"
        }
      }
    ],
    "SysDmOsSysInfo": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises, ManagedInstance",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT max_workers_count, virtual_machine_type FROM sys.dm_os_sys_info (NOLOCK)"
        }
      }
    ],
    "Win32Volume": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "platform": "Windows",
          "engineEdition": "OnPremises",
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT DISTINCT CASE WHEN LEFT(physical_name, 1)= '\\' THEN LEFT(physical_name, charindex('\\',physical_name,5)) ELSE LEFT(physical_name,3) END AS [masterFilesVolumeName] FROM sys.master_files WHERE [database_id] <> 32767;"
        }
      }
    ],
    "WorkerThreads": [
      {
        "type": "SQL",
        "target": {
          "type": "Server",
          "engineEdition": "OnPremises",
          "platform": [
            "Windows",
            "Linux"
          ],
          "version": "[11.0,)"
        },
        "implementation": {
          "query": "SELECT (SUM(runnable_tasks_count) / COUNT(scheduler_id)) AS [overall_runnable_tasks_count], SUM(work_queue_count) AS [schedulers_work_queue_count] FROM sys.dm_os_schedulers WHERE parent_node_id < 64 AND scheduler_id < 255"
        }
      }
    ]
  }
}ѩ����Ǝ��?���?\�~�$��X"c��dޕ�#`S>�Fg�Q6�~��8���W}�k�My�։��5�Zmm��b�d600�VUK����{�~=k�6�p'c,
�d͔Z���Ž�$d�|$
$�	RSDSI�vQ��bJ�N�z�A��C:\agent-release\_work\2\s\Engine\Std\obj\Release\netstandard2.0\Microsoft.SqlServer.Assessment.pdb�
�
 �
_CorDllMainmscoree.dll�% 0abfnrtv`#'"

	`#'"�0�HX 
||4VS_VERSION_INFO��?DVarFileInfo$Translation��StringFileInfo�000004b0LCompanyNameMicrosoft Corporationh FileDescriptionMicrosoft SQL Assessment Engine2	FileVersion1.0.31.0f#InternalNameMicrosoft.SqlServer.Assessment.dlld LegalCopyrightMicrosoft. All rights reserved.�ILegalTrademarksMicrosoft SQL Server is a registered trademark of Microsoft Corporation.n#OriginalFilenameMicrosoft.SqlServer.Assessment.dllJProductNameMicrosoft SQL Server6	ProductVersion1.0.31.0<
Assembly Version1.100.0.0
�:�#0�#u	*�H��
��#f0�#b10
	`�He0\
+�7�N0L0
+�70	���010
	`�He 0��3��X'�[]��Ä�LCɾ	�HeB��־Ǡ�
�0��0��3�rrY@�	�0
	*�H��
0~10	UUS10U
Washington10URedmond10U
Microsoft Corporation1(0&UMicrosoft Code Signing PCA 20110
200304183947Z
210303183947Z0t10	UUS10U
Washington10URedmond10U
Microsoft Corporation10UMicrosoft Corporation0�"0
	*�H��
�0�
�η�s��O�
".`w�0Y���2��N���i�p��K��d�4OƁ�p
C��]=?ϗ
jX�\w�KȿY{E��?�D����6�W��GG���}�\��ɎIl���ßq'�$3�H:���3��%����%��3CT���襳��"��E��[�l�v�d�b�5/'�g��!�v�M�.?8�u6�P�҉ąt}[5�mN.�C���,�/�<�3�/���a�����p5�e�c����W��cJ3[{s����~0�z0U%0
+�7L+0U���g#��d%�#�;��U�%�0PUI0G�E0C1)0'U Microsoft Operations Puerto Rico10U
230012+4583850U#0�Hnd�Pӂ�77"�m��u�0TUM0K0I�G�E�Chttp://www.microsoft.com/pkiops/crl/MicCodSigPCA2011_2011-07-08.crl0a+U0S0Q+0�Ehttp://www.microsoft.com/pkiops/certs/MicCodSigPCA2011_2011-07-08.crt0U�00
	*�H��
���K�:���҅4�}��2�#d�P�D+�e��[ݑ׎502�qvŸP�Z�
6�8
��Z�i�@��ݺT�;q�L�R�Os}0�;��*j����߻/scUa���9��W�;���_Jq]�ޞ*��L�UG@�٤�Zq�NBk�da�s�)
]<U�d[߫B��76^��ډ��	Vy"v�W1ҽ��1�Y=�z�u�N坿��v�"oRTg��H(;p�� ��^�P�ĸ�������xy�o!�E�-�~g�R%��0�deN�m	��:����y��s_�Ȃ��%`�O�9�B�]�O2	��{6>�&%Tj��jDX2䛋i�����g�+6,��hKI���W���Y̙u?��ڟ=�~�O�f���~�P���gl�)����O�j��¹\+�fk�i��n�b�	A�`�e��9�E�=!�{����P]�z��ex��a��~�3-�ծ~5�oun�����^j1�[B�R�����k/��-��8S�0�z0�b�
a��0
	*�H��
0��10	UUS10U
Washington10URedmond10U
Microsoft Corporation1200U)Microsoft Root Certificate Authority 20110
110708205909Z
260708210909Z0~10	UUS10U
Washington10URedmond10U
Microsoft Corporation1(0&UMicrosoft Code Signing PCA 20110�"0
	*�H��
�0�
���r.��n��M4��X!�B*k�ZP��8I���7k���8™��9�1BӉ
yd�~�`$l��I��h^�ߛS�
,ï٩+�z	�זY�`�fv�2R&/�PϳD�]��.u�h��m�:\��F��8d�nd5x��c-�@����
�\y�I)�
��w��=��+ZMV(�zr�:�I^���C���{�{��>��]�O��/Y�;-�3Xŷ>�2ӳ=����8~ҝ�,�NV�!5%�9ndS���#������_��R������!t%_(��'(8%�9J6�|���#��f�aj�(I�_��%]�!K>RĵW?$��z[/�#�p]QFw��Ἤ�_����UK�9��#I��D|E��rz�r�$߿F����Wۃ��MI0�����[���ݰf��{���K�I)�(��}g��bx_�/��W�\�w((��m�(�,�@7O��D��	L�ԥC/t��n�x X,]`��>O3�ڰ�ޞN�F�l���ֈ����0��0	+�70UHnd�Pӂ�77"�m��u�0	+�7
SubCA0U�0U�0�0U#0�r-:1�C�N���1�#�40ZUS0Q0O�M�K�Ihttp://crl.microsoft.com/pki/crl/products/MicRooCerAut2011_2011_03_22.crl0^+R0P0N+0�Bhttp://www.microsoft.com/pki/certs/MicRooCerAut2011_2011_03_22.crt0��U ��0��0��	+�7.0��0?+3http://www.microsoft.com/pkiops/docs/primarycps.htm0@+042 Legal_policy_statement. 0
	*�H��
�g򆥘�Ty.��tg"���c��B�}�y��e_.,>��r�m���?�
�;�G���i�c�"5��]e��}�FPU��|�K�<B�Rа�k�>.)��=�Եw�9��d�D=xz#�}��t����&F*Š�����h�h.��*?*kXIc	inZ�����F+�;н5�n%��'������(��M=����2���-�[��I9
�
�ƭ�����QEX82q'��'��,: i��Y�hno��t�@�*(>�?Mf��M��o}E�v�@*e��]Rb��c6��������'�ͥ���]cA�[��>w��u�aa������A�(��e/��\��֡F�Y�	KH���)ű��?Ew5�Ң��zz"�H���G#�����k�K���ux��7�yK�ֳ#hu������i;��0�L���umc�=ѝVNO��W"�x2!z�A
�?��̤]����WqVNHE�Bɛv[
�Hk�y���mmj�Rs
zP�1�g0�c0��0~10	UUS10U
Washington10URedmond10U
Microsoft Corporation1(0&UMicrosoft Code Signing PCA 20113�rrY@�	�0
	`�He���0	*�H��
	1
+�70
+�710
+�70/	*�H��
	1" ��Œ�F@N�j��nz��nS���i��|m�0B
+�71402��Microsoft��http://www.microsoft.com0
	*�H��
�{�9^�AKU'��D�_�B��wt������߹qk���B0-�
��xS�Ɩ&�L�+�^�ԇ��X�*�M۔
7JLF,��h��&,i~a%U�ɩq*�(����d�j���0:�K_+!J���wE�6���w��b�>��Ƃ�R��j��5�M����P�i߳]pg�;kY���,�2H��PzH]�q,�}��!ѣm"��dm;3I��������v7o������2��"��塂�0��
+�71��0��	*�H��
���0��10
	`�He0�U*�H��
	��D�@0�<
+�Y
010
	`�He +]f?J|S�m��x��UΟ�Q��Gz�O��<_t��\20201006143527.803Z0��Ԥ��0��10	UUS10U
Washington10URedmond10U
Microsoft Corporation1)0'U Microsoft Operations Puerto Rico1&0$UThales TSS ESN:D9DE-E39A-43FE1%0#UMicrosoft Time-Stamp Service��D0��0�ݠ3-.MA�ce3�-0
	*�H��
0|10	UUS10U
Washington10URedmond10U
Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20100
191219011504Z
210317011504Z0��10	UUS10U
Washington10URedmond10U
Microsoft Corporation1)0'U Microsoft Operations Puerto Rico1&0$UThales TSS ESN:D9DE-E39A-43FE1%0#UMicrosoft Time-Stamp Service0�"0
	*�H��
�0�
��a��uI:�E4��H���1_���(b%@�����0Y��$�R��;{W�~3�W�H}�K�� g�*�:K��Vs8�roG�A����#p��^��� �?��:u��'@�h#���a\�Mx�ei`C���A��ab�h ��$���Pi!ac<
_�%N��î֦a��.��4n(H (���o��4��}�l��@����[�Jfw�*��x�D��Pu�#[H�Lh��k���t�Z��{	�?���4�u`�����0�0U�ld|B!�N��/C�4��0U#0��c:\�1��C{|F�3hZ�mU0VUO0M0K�I�G�Ehttp://crl.microsoft.com/pki/crl/products/MicTimStaPCA_2010-07-01.crl0Z+N0L0J+0�>http://www.microsoft.com/pki/certs/MicTimStaPCA_2010-07-01.crt0U�00U%0
+0
	*�H��
�}kd�N�y�n�����A��J^"�i�n�C�s�z|j�YD,G7���a��h)�R~�
Gs�|҄mS3�]f����G��6��f�RW���1��3v�.ߖ4D��Y�C�U�m2����O�	���,�_�"
%���TJ�E�X�nz5ڔg������$�M����Tp��:\Yo�2�Nf���$�W���ֲ�V���b��2Y��8���I�e�F.(x���w��g�%���3�	In���B>2pb0�q0�Y�
a	�*0
	*�H��
0��10	UUS10U
Washington10URedmond10U
Microsoft Corporation1200U)Microsoft Root Certificate Authority 20100
100701213655Z
250701214655Z0|10	UUS10U
Washington10URedmond10U
Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20100�"0
	*�H��
�0�
��
�w�: ����i�ktTե
����|hK,_���a�v�>f+[�S'1A��	�|a0Y�0D�`��TC�M�8�Bݓ��s0W&��E
��G�Ϳ$`2X`F�XG�2�tag�_�T�ϓL��Ħ]�an(������a�F�'$gr!��Kd�Pb�]�w=�Wu���BM@Q��>g�f��D~��K�n�ʱ��z*
1��N���5�x���<�/D����d��� 	�x����D]^�O"M���0��0	+�70U�c:\�1��C{|F�3hZ�mU0	+�7
SubCA0U�0U�0�0U#0��Vˏ�\bh�=��[�Κ�0VUO0M0K�I�G�Ehttp://crl.microsoft.com/pki/crl/products/MicRooCerAut_2010-06-23.crl0Z+N0L0J+0�>http://www.microsoft.com/pki/certs/MicRooCerAut_2010-06-23.crt0��U ���0��0��	+�7.0��0=+1http://www.microsoft.com/PKI/docs/CPS/default.htm0@+042 Legal_Policy_Statement. 0
	*�H��
��Q
���?�q=���!o���1����Wm0���f�j���x�Ǩ�%��kTW+Q�D��S���`�v�@@A��\�\�^5�$VKt�Bȯ���7}Z?�yJ�R�8�/y�e٩�k����zoK0D$"<�����Y)����p�2J'�U�/���3�b_��W@��Ιf���jb��J�&�9�Jqc�{!mÜ��<�}�j�x�m���8ؔ�ƥ
������B�����"8 �%�d��~cY%z.9Wv�q����a�˚�G����ͧ��}���;q	�]t�"aڰPo�����1��:�eGx�H���r~akow��˧	�9����؂�r�����*T9�[��
U�z�s;�-��3.)��/T'!�ȬN�(���ۖ��B���AM�*��f0ӻt2K�c{���/�!�Y���D<�Pqס��U�i�W���0����M�
�]O�8/��X.�
�P5��	'ճ~5��6��_��t�I���0�;0����Ԥ��0��10	UUS10U
Washington10URedmond10U
Microsoft Corporation1)0'U Microsoft Operations Puerto Rico1&0$UThales TSS ESN:D9DE-E39A-43FE1%0#UMicrosoft Time-Stamp Service�#
0+��_�~�{�t�	�R\��ͥб���0���~0|10	UUS10U
Washington10URedmond10U
Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20100
	*�H��
�&�^0"20201006181454Z20201007181454Z0w0=
+�Y
1/0-0
�&�^0
#c�0M0
�(K�06
+�Y
1(0&0
+�Y
�
0� �
0��0
	*�H��
���1��mA���LϼE^'���9�U,����<��~��B~��ծ&�����K��<��KGǐ�Odrɝ)[�U^LCƟ�e�W[�+D�Y��w��r;-��v��.�7m:��7���w�1�
0�	0��0|10	UUS10U
Washington10URedmond10U
Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20103-.MA�ce3�-0
	`�He��J0	*�H��
	1
*�H��
	0/	*�H��
	1" �J:��P>������2{~O�$O9T�,��nS0��*�H��
	/1��0��0��0�� ��Zrr} ��<6�)��?�Mu��9��0��0���~0|10	UUS10U
Washington10URedmond10U
Microsoft Corporation1&0$UMicrosoft Time-Stamp PCA 20103-.MA�ce3�-0" H�TO9�;��Qܳ��F�̆7�O�������0
	*�H��
�rh�W�³�m��)���f�O��/�Q��%k8��]�&�쀵e�~ �z�39��?�����`M;���C�`���$��L�m�mH��)S|.#�f�]���ݲxZR�6תs�4���`Ip������N�g[o��1���DP!��eh�����m���la*��1$�HV�;#y�l8Ҷ�.f33ӉW�F��"�h�j��c�P�ʙQ��c^c,�"o��������>ΝƗ�1��|�Ѱy~