From d97c7c226a476b66c0952dcb8358e487f652db67 Mon Sep 17 00:00:00 2001 From: Scott K Logan Date: Tue, 1 Oct 2024 15:29:06 -0500 Subject: [PATCH] Add usage documentation to README.md (#21) --- README.md | 34 +++++++++++++++++++++++++++++++++ docs/github_review.png | Bin 0 -> 12572 bytes docs/github_review_request.png | Bin 0 -> 19308 bytes 3 files changed, 34 insertions(+) create mode 100644 docs/github_review.png create mode 100644 docs/github_review_request.png diff --git a/README.md b/README.md index 5b60573..6735cc9 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,37 @@ [![pypi](https://img.shields.io/pypi/v/rosdistro-reviewer)](https://pypi.org/project/rosdistro-reviewer/) _Automation for analyzing changes to the rosdep database and rosdistro index_ + +The rosdistro index and rosdep database hold a significant amount of semi-manually curated information about various types of packages and how they are associated. To facilitate maintenance of this data and discourage modifications which might introduce unexpected behavior for users, robust automation is needed to validate proposed changes. + +This tool analyzes a git repository containing changes to the rosdistro index and/or rosdep database and provides specific and actionable feedback. It is also capable of posting that feedback directly to a content forge like GitHub as a pull request review. + +## Invoking rosdistro-review locally + +Nearly all of the validation that rosdistro-review does can be performed locally. To run the analysis, just run `rosdistro-reviewer` from anywhere in the git repository you'd like to check. By default, the tool will only analyze uncommitted changes against the most recent commit. If you've already committed your changes and you'd still like to check them, you can choose a different target ref with the `--target-ref` option. For example: +``` +$ rosdistro-reviewer --target-ref origin/master + + ✅ No changes recommended + /————————————————————————————————————————————————————————————————————————————\ + | This is an automated review. | + | | + | For changes related to rosdep: | + | * ✅ New rosdep keys are named appropriately | + | | + | For changes related to yamllint: | + | * ✅ All new lines of YAML pass linter checks | + \————————————————————————————————————————————————————————————————————————————/ +``` + +## Running rosdistro-reviewer in GitHub Actions + +When a [rosdistro](https://github.com/ros/rosdistro) pull request is opened on GitHub which contains changes that this tool can process, it is invoked using GitHub Actions and the resulting analysis is posted to the pull request as a review by the user `github-actions[bot]`. The rosdistro review team uses the information presented by this review to determine if proposed commits require changes before merging. + +| ![example GitHub pull request review](docs/github_review.png) | +|-| + +Unlike typical pull request automation, a new review will not be generated when new changes are pushed to the pull request branch. When you feel that you've sufficiently addressed the feedback given in a previous review, you should re-request review from "GitHub Actions" and a fresh analysis will be performed. + +| ![requesting re-review from GitHub Actions](docs/github_review_request.png) | +|-| diff --git a/docs/github_review.png b/docs/github_review.png new file mode 100644 index 0000000000000000000000000000000000000000..2384133c047999a6eb50517da8b6ca1ab4390418 GIT binary patch literal 12572 zcmaKyWl$X9wyqlq?(XjH?hqunI|L0b!QFxf3&Ab8LkJ8mAwY0<55e8tPG|3X{@h!2 zy9(%Lre^w+UTeM2yQ0-pz8vOlvUr`nO)9b6H=dNMq zMd9+%+1l2@io)H;#frkp+twNYyq6r+B(ZuZ5ZW(e#3W&H^DKzCr^&DGjj1!D9r-t< z7QRcCb(zA8!cj5XGNsy&K}}Tf^3mYYEe(=fZDFU1Y(iA-&q|`cP{iu(?!EQ3F}l5iPgOQ?9XPqAKPsXJi;i`bX6|wxBbQp1=>EN zKy8!`s?Pu%rksRzDkr^y?cLnG=(Wab-#yD~r+B3)s~!qMR4<}+I^Q|m`ACVQ%Nl+B zj~`W7dDyDy4HW0p^SBA?0%=BgcOzvPqa)aI(R~{D%*G=_C9)#QB$~WAJII0w+GB>< z5W5`6?H2oIoU0V8nrXtfNU?gMu$V{(W#5ppE-EDG`=laHlEq#y=h>4KDRtj`CP6Nf z3_E)0e*NRssN-rkm4%}K-N7Dz$qDz#GeoDywKIXV)B_qeFNC>cvz9kxQFV%#l+_a! z#Q_F?o>X}ehRrK@gI=1?N*8GgGv@7|=g*yt=qRhu8@%jIH=-)!!7NrOolt0KA?H}5 zCbvFbre033Hw~AMP+AfnGc#(?K7soS(M4Y04FHg_|NTG#nb`yYKmjPoNNRa69p`xI zY0eY(tKI-#zU!(*sHL*J?F(;~ki^8rRX?!1ST=40N?d`PX;F&>?EY8r`QT(D${W`y2k4L~+(mPQPoa@sPZcT9hhhZvwG7 z39vGx3W*Jums|ym^3@Q!_z++Z)QQbyxVg$0m{W&~a@qt9SmDBaRuir$HOp?|$E1>A z-(kT*Z$eVdGFw{o)nBGn`s6ET&Fl0?(BOdy8y(iSBHb)Bb> zwlpoKurq*}+zZuHkss`>kwg@qZzQi?B51Xd0cX%c(ilxRbb%4EfqHYIT%0 z!rF}VnYs!?=A^Oy?)MzXcq~zIaXDO8G1b+qWC?N@GHD`Hb`YXC*}}=PSv#sE8%IY` z_q_@IdTYj%q3moDh(R3DBd4gO_&V7cBwCG%Pt@oXi6$j!{n7{K z4PpTgMlBz=@6I<>R8+v-RIFjkLnK0$(6jMfj|DDFQt_{gfCyRbq|F4E65Zv`5Ey>v zHFq~RY1(q;XQ$d&;*1GLPN_v}#{*fqpOx^?K8AlGd_6oQXr(%p$H&K;o0}c&?Kntp zn1o1&k>J9*H(U&=@gy-I2BbJRIOOEw9tSfkD@HT#Pb;S8cTk?2uA<86V#R-FWkA@< zch2uVjPv9Otd%5%&ysjUNm4i$lI0WHKn#u#4v5IfPyhZ6r9g<5nF_ZqGn}z56*IsL z>;CuLgnZLt%E`%bUTMa}#7xS_Sd?TdCzhE)HKh4IDwd#*gNwx84{`OZs!|r$kKrwF z4O*K2OYO|X_{9mqZ{>wlX=KEP2X1yEQQkXlCLc@vU7vY=;(G7)FSonEeN3WIaDlPu zRhpZd8B*SXPn)(jEmpLMh=|%PJZiVW1BD&$0XYP&4WX%aL0fk(wJqYuyLp0+KWysGkM{8T9<; zE5`aLugqgn13-b+MP~DMai6wTv9)!oQd{TQ*O%LC`T4ff)6>`OG}D3?G`v_x8=Hag zac2hyB_*Y7a2u_(xOttd5E2m`fIH>Se~#^KTr8{~9*1+Zim5WPvUD^wE&|z4PyT#a zalVFjkcYwqF(fp!x#NOJWm4;j;(XZ##QcT{j#b04PSL+@UP^cYGmc@7=2liY_Y8i= ztq{jRA&;eogQcaivc+1fdOwJ7({=}gEG*Tzk6ErB%RxS4o!(VDM}h>+3q7sv;s;X{ zG=ilz+Vx{^RAsVi)2>_@s&XwR9#wF%zP_Uc_wVL8Q_8_ixhAXK?EE}FE-oz%&9@CQ z0~AS&a;*wtFqhoDJf31>W2iM zTRm_7J&1<-o7GjyctH+aL6YdGo*4h%Wa}QwS*`2dUy1oW2F~EA{vyZvQrqP0=&@+Ryf15>sND>Mg@pwe za)?nFQ{GKR-?biT*w|X_0#_T6*H{+ z`?EXD%*>1crKGh{CtvNx&E3XRi6AIj2$#cBUQ=`WCE!st?*$v+2s(sG2^0+3mBR_s`48K?MkS zyeGWYYhAtEG^ylGoYo?)55b^wl|!8&GnLFSnmR~AD8R%@+v4$uE?M57SsuKZHr~VA zqa{wOgN9DD_@Hb79TS}$ewROGKPP2T;My8@4raYQ9a({38LCLtXcrGJU8W@X+tbCR z1s!eO;?k1z^vvp~gDm6aCNRhX0AB2Bv(+PeB$}44E)=lDW995j&c!)0HAJM&WN%k7 z{zOR3>Cu{&zz)3Enn(|QY8ST%>fdnL43+i|fX9luD<~+aJWngaLIi@P@|EJ#cMcA~ zU^S(gyqt9{`2Nqg4QiOUIOSfdjcr9&+P=2{fRuqHdMjNT_>57^B+N{`u_JD?ao&x+ zA}YF%5)sAT>~XkLUkYjmCo;00h`5mfd17vBk~rB)tJ&ZE##=5#0AR@_C}N&jnbl@Q zsj8^Z$k8OB`o{NO87XgSd{Mt#<_9IZfc?AGTvV~w`yS}~__B;~sz1l;5MU9=cgMgdOu+hQR zx!JR}FzL#g=Eq_GYDl5%>O1+e%G%{t$I9@Qw})I_r>n>r9CdX`ZGN|GkcVQIpzG0j ze&-bdpNp+*LAS=!m87I39Sx18eX_3mox@mH{McOlw{mjiqP`Ai-@2*Phj9&1;y%Y9 zA+wt_zh7@UEl3d4phRF|^Se38;jz^K4|TJU(o$WRQYiKEp`qc`)zx|b+Z-*n%BrfF zyjtmejqyBjXA673lOz2WBQg7%BV>H`&xl0SIG{cQi-O1?LI3@!?d*O*ZtF1-_q(${ zl3`#jImf2A;@Y39HningI@_S0P>^E3^x}c*sy@F3OHP-c6O$Id!CJ)6%gM?Llxz%I zLtAI%+t%d_ql0RJUSE5(jOSi>E1Rr|X;Oc{!Nq051t)U4CgEN2 z)8PnXxRjuvh=~6|gGCn!9H4}dWohm7a+nkbMmn1-g7KHNz4D*tb(cHrRpsStx0_Bd z)IBYicnml(;FB1xgrZF~^z0YdyWtveObSNtwWy#^B{3){DA3T*6AUQFT$SbJg5GBo zzNjARk{kpm6$13Cxld1*3!`V(=XY{FWbePl_BDk~mx zb%x_7hkKtE#zBR>!(g)>O)|QalvDt~a(d#Xd7oZi@1~$o7y02;+(NYgP337@(JA*? z_?c~qCnYUSk?P9~5k%`>4PDkh2@RbjFcEa-+(qVOV*^SFmF7Cj{f{uxFf!#A7dNxK zn?u`*Cyu<-@Atkp%zVx6UjzWO$U?95@sD|;ZvdRFU2Sb`&I~23gxoC=S!7G=qDbXj zb33~s>pBn|h_Jm}(3)ss0~Gt+&w`hD01zefB_YA|=#+kf>)aJzRHVb*Rt(H()RBQY zm9tX$6s)w1{qv{Y&weym3gud0JqR%vbq@NWd)jLs@OWdzK_H|&X$N6sWZd(AW~+ge z~VjDhT_>S=LhcxNcj2^ zJ@7FLA3}(-las?b%gU?Y0BVC@Yi5SVN99aKh5})M@8JBoyJrg8)3u%-nSK}^dWX+q zz~i<9)~E_}no%;)O-aari|2l1_j`>m$!&pOjE#%{AcHVtZ@FPc3kYtDjI5Ecw*DQv zqWmvQ$#Of`l!>2Rs&X>x(v=n&wfSC`K0n69DqcBaA@<(1-kh$sP-7u#CMUx{M+mny zU-*ddd)W=6cAPxE1Gl5L>Q~Drs#HCo3zf$woHoo*D&idWW}AqiJ&IoDw@H zM_eG_03EFqDy-XKsa0CFGpX@24EO+s&EC?u=P*iz{MloVGzl!4ga(?8#>O9Snp;~E zNN{mD9PXUuf@~cs)3BG_M4)&s8C0v>u{!hOT09>nd%k-9keRdS`2gY@8cE_^1uw0s!_jzGkSXsKL_J`HigU9Xb&# zP{vRzuhjnGgMI7^E#2DX?JYcTv<6`oW$mb_80zhXWi?gThXT%QovKfewJWs%06ITz zXM1}G8t@MYm~2{GTLXf>?2Ze2{k^zMV>c$k#s+hISeUd)5}b^J%?AZSYNF@2C3&)G z3dQDi^2Hk5d+dBfSp=8&?P#;a7*R5`Q-ihg(g7VUE#VUA#Tt{nn;_(<+|k30?8zYL z5^%P|1#<(xSK~ov=8e+62n38@c|l9|U@d>ThXBGLpz)q=m+zxC6C^siJkS_ouv$Rq zEi#sFw(@{M)Dp+nXnd^T?tXB4r_M*j$Mrc*m~|ce3LYZG4o$NaeI zjMm&<8H|}~WfF7Ur2_hE;Fpvxf75Upd%tlrNCyysg*vwnCMIj6#QfgA z=da?gPsw?CUG9rqLSZ2cxNbWmj(>QvyIk_aZitDA^TaOaSKGYwAXSqVvM>NxuU#X{ z_nAve6V;Z-t&i7P^slS7FOT2DMAV&M7D!d=Jkrqn&7`}=#l_KZ*`6il-=3_%0rJII zFfh_|(<)RcXC}%yAUP=dtMb77C7DcSEOT^&2L~4q3sDB1zO;W)|6|M3VsiE$L~L5D zIxQ+fLV{0@Xm+2Z^7U9QE{VM#=aivC1bmO01;;!w;kJFT1CQ=5-)0%$A|r*%rGb=J;L{zY5aB(#d^y-xKaN;u&hbtZJP~59$O^ zLFVP<<>!NgIf)?HIKPt&gUjDcm^dJcix{=OT@i-{K!B*D-_F%#N}a3$_u$q3f?)Nn zOP0yev4Yv}>7bJR_GnR$UU;e&T z6k}v&jDCLZWtQgo9QP(vSXgvv!<7|GpkjgobpNu4E2EhlEoVGGAq9XiGZ9aJgcLi9txF{2i~7v^7}m{dr&`_R z@j*sEuQq|i^zVWym*ZBStvyP3F#ThTM)X4W zU<awExmm~I=W=CLMI|MCyu6$Q zC=i33q$D$2+x@Mr2A2&fVc|AZV!o}dt-W#R$=m7~5RX-ZFape_;4sk8(dSv$B76%7LTL-pVm;#LhIjXt8UYju)<`aFRuG+x1q(wg=_h%?LO-|4YdBT-}n`7@%yu@yZhDoIc1W3nRHPylL%Q} zVj>0}UWBaw-idFzc<8vWZ{&n&f-(!9r?V(uObC=w!g0Ez`Q?>II@59`9Fufy}bvv)1Uvee9uU3x`db9*Vmc&?n zA8PXX5qWFimz|1N9z0^-o+;8wX0s7CH@8rj*{G$bMTbF1u&#*#%J`PBw>3wjlWSr)oG|IQmy#oUS_kP+3uyS*8F|o3~joivtO#3#L^sbl+ z10jpw*`&?WF;=CO>`~4U$V)>FdBT69Hg1pTGY`7oPE$yxd-LXvEo7;-^TF=nYCk+Y zye9(Hf`ec@S5$iUdVht4=jF?wr4ifw$cWNBR4I1h(a{lk&{LhRXrZS<+ED(U1jVbV z@A198O@F%f=9G4nmf%5!z?I=x}qiSYQ9+$AINU(|RB{eSSM58Q{pX#R6JK@AV%# z(U<0BDKKJUVyLL86%`fzZq4M3d+YLIEyVG?UBM5kAlnxqB|+0wSLby7+Y1Aa1_0?w zJ5~Dic&r9Iflqg6pHN7HKE=Nk0$)w%v;eW6yQ1>1Q$*+x-x*AU30W0*Qr);db3u}^ z7+hvNc9SP?-lE+{&E-GA5Grp=CG1DF?>3^5*Rd$jO9OmTrAXC@H?&8 zI5^1klS6h1lLm0CoIkgN6XHy~dV0#w%bTPigX#ex^)c0}a;jtC!G<+p6`v|-Lrv%} zlqO$Bo@S|XV1$zeS)cPs(YL|EA76IQ9)cy-;=Gk9FbtNLk{D;uhQ8GiXa1f;ZFgdo zwNVu(OXxSR+cR3Z>5Wp#2j7ASD|I(2NuictQlL>TKvL6D=m!7gQ-rY%k$kBzE7IQ1 zZRPAieEqy7((Kw~M$blLlL`YYv`=Yw5<|plO_dr00Jq$~mhWRwRiUgf6|`y{*g87@ zKs<<35uFjt#oAx~LX?*4oacd|k`)^<(`pbP8#UMCID z29*C=Ox0CYp}C-4dtH|Nv%0QsKaMV)5@X;I_`iJK#3n2ekvG+pNdspz5)>2S53d$h zj*3*t3YI@oAgm(97zkGhFL~ycRu+c+HE#gD#RX_!Vji@(4klmaJ|AR~HzLv^Lf`Z6 zPu?B9HWEa?r3&_;ROop5rUe4p>#|C7Sn%Z#-z&Um%&#;ETc#zChvXfxdU^(&N=oHg zVR*~S*oA4CRu;%@%l|y)4wz`AlfyrtNhyeW%>*He?b`=Y;yc`_`_N=>Xv|k3bm~tM z6t%;TQ(bfO-Q`KcxY3{VSZavPKc&iOBbxAFAj}k!h1(*vkl<49U4!e-dfIpA5E0E- zn%@Z__>Zmq%BNKkQgL4g{og@63go-N{@2s~ujlPDLk0o zy#ud6YKtoa^q0@>&q$;|6WmuadSql2m#amMp{ll4mvX?~=qoIAid6BWjrGos5gL32 z)(ka5(W9P$0Vq&Cm8-Srj%7V?LlH1T)EK^Ll{zv8E00 zcVvwch!1gtV$l3wFTjQMFH~gY*hutb!yqCuvHK+m^R>sd&;7k|(_)7~$MS^<4mIcj z8f!n%*>L}Nd%%gjel4Ug2Bn)>!f+Z>i3ln15ykkyobdP%mXqSS*$_W=^0sW2M2!U z-RnVWhjH1hzT9q?PI}yYe80`>d|FySy~va#)F#kHue&eoTf`AG!-j{42S!O^5pRsF z(X~d$$C6QEO%08%hYNdV=E|a?$8+5p|Lg5}zndokGbsePFh({u4W<+_vggTG9-`+3 zXF2%CNB(o~NHj7rzY`MR{mF{p;aqiGw7$>rk_V`?1_oFS`GeZ*JXZPy8bDPsS*}^v z*(o+VJ1hS5os*Zh+N081Ms_Tnw`Z^$6D$(TZ9zU^=imSfBr<+Y;WSl3$r<=IU0G@G z>99UIzxGneZUF#`30zP>QWE#U!GQ-WJg~5^6!^MYK?x=8LSW=;{X2Eku(F~8bY+?x z2stL4r%OiH1Db}$YE%^z_J79_lZ%f*0Vr4Gccb&BZGmSY8pSLF>?`d)it6e~oo+>m zgUf@2X2712qoadE1R8N_M#iLhn--n+z?M5)Vc1GzQ^NR}Sx=lzgAm{2?@?k8hkyTB zsM`d9N}V8jtY{`?W)aax7$5?j{JgzvZ>6RFVfNAQ=9ZjmVPr-rnjvpzYo)`l>6*>o zKOhnXk%Ny9FIHy0)|8!@xo^WoQnFCA;~_bUhA%58(WO3q6b@)^4&<Qa;$o|u6V9F3ady)d4I?8Fx4Drpcy!o! z6p&3OO-&4ZZ{G8H+P)JDINBM{ODMz8G6GkS&-L%8uUlUWcE?3UL_}eGYA|*!6b#b+?iB10r@vRgPTv)jIl6Pa= z@$pz;Y}$6Z^mw@mbO;b)`^W@8%CjY(f}Y#JfDLGzqN1YKHjGZFG2k?cvBk-9yL@|% z`k54krQqxGdcN6jL&IzKt2c0L%r51?b!@ZO&kOX$3#{cd8U9tP+F#T1gm5dJWf*XX zCOdI&_jJTVr3oEdlEQ#3YRM8wPa<0%N0 z4*vX$EPi0=03T11k&-)>z@BFX<4|X$Mx|;0GJU?=BGD87W zbpmudu`ebj#*>A^x;0hC^=QD)&2yb9Ju)uNyQdap)*%w{K&e~br)JkqF|jgcelsa~ zm9gY|WIQ_v`zppwq(@Cnjc%=xwD#|zp?9~F&72k)o+HwcXs4@f=zyBONsH%d=HN!M zO3ni|>-V5j)u7(re2*;Bqob^_&|=|Ij$3?dEpBOj=A=UI&2N_naNY$35dX(7;O2fl z-c!fNPm9hs14D}u8$S=rNV?g@2M3lA`D{EvV>ZpA61w#^FX!GUOnCICs#zO@Hu;@Y zyyKi!kSUaw7VBz#g#o~BAK{6h#KJ-gNlD51F4vp~FwoD}E#mFqv0e>;PHxr62-tJ< z4=b_(!SYnTk9Q^lL1fp=*r%&tm(t?A^UpB&TPQ$)+dbg2_~3UJ|xqRPvApX@IcqK#JyNYGLZ6tYS$GF2(}$|cX3G<3t(zJ z{}tX0R<}NvJ0M~k{XLf{RRZQ~9zC~%T@Wo#O-)_(m03Ip-ogNuAFK+Ur@6V**rjzT z9w%cHzzqG5%!6)gJc-y3^S%pVu=nnHd_5AKl!?)2JD&Cr;&B`|7+MrSTx4kp0?(tZ zt=`>BVUW8(F=x1x0tIH9$;i~N0@b`u)4*%q)*N{ns?lBjVktFFXn5>58-S%)XSD(4UA@$w;E=-fts>zS7 z&F>Qvt`@(?;^W6gM-PWiEJqb+ljLn|Y~<-Q!EUSr2oxY=o|JEv@H^){K*xFRWM-D{ z6l=tG>gxgS+zAD<-Laf%hFZ|Sz7)$|-(fTG&$5Fc0pHd=uYU z(9S^2(+ht60vG3S?eGdgQtP!?811GOqO9$K3jADNCJs0}IaxDNNHGZS@lcq<{rKjg zaLHl1`YjZDE&l!)6bw87Ffmt>(a;JC2L-=~%D*Gx_=ygDcYf_08L0vpDM*7G{H?4~ z0_{CM7OIy+0p3!?qr>Cl@PN0UUx$4B)h+1pef{e0iv!9vFgkSId*X(_BNXc(F3H2ZAB-j17zX-t=_NMjB$P%fREhy(Qt1x7F$_nJ3!ei)Rp5n4Z}>B=HI8xO30 zH0UW2Q==b|l7P7z>`s~>Clkt9YgN+JOol+ND-FGwQigv0-A1|s_mL4=>3pp$TAGEK zEhAR6yBvM;pis@!T9VZ3Ud|_N!>r6qJPeMle$h7OA!a(&+!>QWu;YxMe}1-7*LLQh zZk;P3eICE5VnNrm2tzDb5!R{Nci9on8*Nd&_$J^6-{Uh~4XeeMC z7x&@K78hZP6fRZhoQK>SI9hsoK_Q_@!mBS|%t2awv_FkW4U?7WO@rn7^JfS;xd;H# zVvUNBkm|T<8K#Y{%+?Z(vWpw%Umy%*)GT#vS^4|d96H3t+4=QKA>Jt8MqTOWuCRa* zp_R2=gF*C~0875wSx78$hKvS73aGoCx#xz*#)!nlnrmv}N3Ey#QOdQZCMFVdQ~9iq z^vboUu#f_t;U@Ood4{LkL;|yqPfx`;d3dNrr3)v)bi&KaSGQ1wR?*;9G$HP*tN*-u zyT4CJNl6LXz@W>|2?RG*fA_!K8Ko_zb=#4Fk3)kdeWAj|!*g0|$Caaa`fe5g_OpPb z0q>2uIanD4VhB?IXfHTQE>@geNfZMU!dk0`y`4;NZh-jQ+zg4Bzs&9AhrA$H(1|8@ zK1JURvazr*R@XrTz)p^)hK8$+p2*Q`-eei7P9poV-Eq^q+w~yTbPOy^PFh}3$GMS3 z4F$Pr;Vq;$k;Bn3nGmNQA%3qWP_mnJeAMm&*=GrFo5;h={475YkAL&~jR~_J=e72b z8ztJ6)?8fW#lpbQj7NTYxO+QT zs<=CnVejl*Ys;*mqM$r!!!w*(i$F%cB4w|~GDkn0%4&K}m?WbV#H%`!J>%yu&gpuU zUYFfY zn|!H#2tm>474Z-e!KnFbbYz6b&SUcOFKbp4=xFs!PjNzvyAs>;rOs}BAcJ!PPd=8T)bK+;gNm=M#wvg`r~AA0Qo&)Jg4NVXb-!#u z;)bt-S_0Viim(FfFP78IQ9zhsXy6V)swBOcSV?kNP zyVhq%Ndp)E3ErmA>?4#rD`^Vwmj2&PZSXt)Dcyga+rFUC1qlUs4eC-5J`_HoXEB?& VU7%M#f$ivk!dn%Y8maf8{{wltDewRQ literal 0 HcmV?d00001 diff --git a/docs/github_review_request.png b/docs/github_review_request.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a9bc8824a1edfd7f763b1182a12905ced5c6fe GIT binary patch literal 19308 zcmbTe1yCGexFy<1!UPWx2A3pA&=4%xU;z@`U4py2OOOzPBm|cUB)GdvaJRu3Ah^5x zc6RH&+I#Q5S6gqYrkLuQ?&<#J`_6aH`3P5(m%_m$!vp{T=fnGV$^d|31-_jjsNj)A zry_uzrDUFM#gDH)vhou<+c+A=={(0I?gMGs(A=Mg>W=1jl z+kO7$%2dZXTcsLqujo4t`R$y+tQkAxZ849<#{=ZKGd z3`0BkY$2B7;))-{#sA}Rz=ufn{U-FjU6Ck6K_yF>3DXVVu}3kD<@1+K^#a9U%nWsl zi9f4Z{v*F>Egc<+bg^*nS=1?YQ(avho}vGt#y7`ckbu5AYW_X)ybCM(!f`<;>|!4+ zSTe~{T?2dMG(SnYqf^#R4ZHC4o|U%e!`g5)n@ zxbeX2f)4TyM2gy{6PRP-Gt;=sRF8q*SOmgOdX86-&VLL8%|i!WtkU1gvJmrYZhche z;$D8W{5gN?2fK-`I-kAcWFPlrJ%hg?V@?T+bK2x<0?iJBm!B0C#h;j}KF!i&=oI@h zv_f@H+s*z>hF0UrR|>3Lkx#pqe;)o`*c9Ea2B#2xL7QipuRyOYM0wk<%)--$f!Y{FoAZe=?$Ygkp}=G$;n zQRH?od%jasY^7s6KUsePB(cS0?KWNX;C|S@=r%-uhx~l)>3cP~>QpD_Ubm69;mPJs zOHW)KfG<`P-6j`+-*zbiG4!DcehtGHBcX=S1|J3f|2hU)LHlp#{@)zK@4^uKFW)=u zS(dqMUPMQ~=QzwJEa4s3r4Sma@i1xey=zPjx$Sl%e^X1I(Ty^kI=p?VofqF=y-R!U zF`Pm?R+!E`fY|ETAypZd6pp3{IZoUCexbKFd0j8p^kd%bamt0RfUnURp2Ymszu&zG zUGags*5xlRD(@Gcp*Lhl;1o)-liJ!Q<{-kS$XPk6{*LxL^?(2EggI^Ci%bo^RgQZs zzzz{2{=&NoweM+(3!gf9O#p}#D?b9XoSp%fUxKGSMK_<0+p9q6EbbC3{l~Pvu@B$A zj+@vnfmeVRB^)CHa!9)Y`pmLU~Wu89I@dqz~}NhmS4RD|5>sKJpe7y;OI zV}tJjpeZu=gK}L$4+Qw4Y6bp=;>MV1pG(sB2EEMj@ybe{(Yd4H<5_pTJ>{$~sB6Y# z)NftBP+^6%tdrq3AnBgpmY@!(+6g7^3Tobey4@c-u6d|270Ff|bHC@o)9 z#o%Xta}fC>S{LTe9entJrY}|}?^2S$n3%Jc=vV#uuPKjd$GK;F25}2kRJSTE3D60)rPvY?EjC7q=)`|K)f6T1#-RK&gSBQ|~P^ z9@&uvkJxsD-xhJ`rwO(b2DiThv%I;<<*`{>IsW5x{D)z?6hA+op^r<@FtoAdbS37GxI?t)dm~HJgUuc& zBs7vFZ)yjR8tH#|h|;7l?6T=KK|8ID@*KKO04hZh+mzo zU&Qc)#drc@tWR3TaY{70Zq&Fd3Ql5GOa9DLJ3|o=(Um>@tn>@*2E!4dKq2f!e|-9j zkQz`_)^$0z32JJ(8!>DTj7giTS-5t_qeO-^;Cc=4@ilyflX#umh`E|(X|k}rdNtHL zv`oeCcIqH1+8i5Op*m}0ZZB+TWML=ocHy(^rsBiJ!;`HmEnSDs##YQzU5)H$^}Fki zgj*PyY3pj99_**dM-4e|2%p?sS3SDA0uFaiu!@R`H12O#7z})Tk2}h85jl)s$b=1* z4_igC+kgLlNzGsCzPefVOEU8AxMGcUHh#lEb9@eAJ<(^t#MCFABa4GebvglslaZ1u zL?>>otre-}8D+j8TwVq~9x<1gnwfl-lYNX0S*Sd64_yk8e^OCiuFhz3*%Gd}_IYhBt6In{Km!}61pu>J~dn*`k`oe6$ z$#tj7cW(W}oG?37&i!I@kkzUqSBb5-n1jRI%G#>E{l&P|M7Ho0oZm6CJ|FW!bsWvq zO!pN#bIQ#rr*2fRd=kIgZE$}AyFs&$r_tuB;|hb*Q%>`R+vBmZfq}1f`BU>JZ~T1k zgmuri+MrPAvuBh-KKKACD(acn-8VE0CuiqnW8-#L_?jlRB?q4IKe zQ0l;Wf8d+LeS;hOj`WE33?3GL$ zY1V#SsGJA1c60=1Z$-ndC;$iwfKM8s9LxR)2jb@Bbbhj(X7{8zbY4UU0wt(ix zI&v-v6cKm*+}f07akhlDjWx-1eo|s8$EDku@-gKk*~zi7^7W~Qa+{sLDcFN483h>=p{JhGt48O&e2M2doFJj=>$yw?vS$nw+c#j`Gl!-9zPPO=}sHoW5 zMvBmwXz|dpoiB%+AXUbhxZTA|rpSrs6b&9OvW0i|DA!?kvYH+p$!g4w)Dl8C(ZdF( z%SMrsv1v(9fDhqNaD^7c^u9_y-6MCnUVQ@e^bJsOo9$*wu$LILRC|-r%wIP}V{Hsi zOiak9z&_!Bk53juoF0DrH8?O(WNRbTXj(kZSC^N! zSLV9M2L}H1&iq-R0*+5kzD7n;rs;xnrz&k~Y8n!)0KY}*0*VD{TBM{Xcb_QIbO#0o z=7qc>WaWz4Cw}*;_}*MTLHDVWmVoFRQ=PqQ_PwQ`pscaGFUZWK0OYBJ-L^Z9z?HE8 z^Nj*y@b&l;AUBtBvHr>)gMq<-dQmF>%COcFI;#!IItr17HwYo?}{Awk)B zW8aMcMmCm8avOL;Lcfsdg|I+&Xovz%isVUR{cQ60<>kqBee(GD_)m{RMz~be)Eqx9 z>LXQ@@KiN)+RF>0qf6@QLh_O<-OS8Zw_?9(=xoXlvFR@?49X3<;o<^{Dmn>J)t_$ppbmP-$N90pt`O~Bx!tN;4){YOc;9|f5bmy*CkA5jdPfvB>i@Cqr zKFu5dK@_N{sG&p7VLVy7^kUh_7!qjsLNYrmdw0HK4on+G%2QJlZaUw<9PMR6l1U5W z=@O=Ku+n^+!T2R}+2|Lym8*o77H<+PsHRU2CGZcAvWvaAU_vs+>RtH(eKT78bpAY!r;O-l!s1PzU_xBx_ zZyys>X+HwE7t|U|Jfbwe?PxvSliMYS zqIhtf!i=FNHFy=mGDe0MdU>k&VvJwLwp_e~u)q+H4~$z?sTZugktkADV`ffHNzp|j zQAC*HmKTB*&3&QO5z^CSlv7?@zr(sQ<}6D>3`t~U`cns7;*>>|xcbZa(-sg2=I76i z{ z>yYQVuS+9Y>sy$tG~!fiu)YqJuTn82g@^2&sjyxTx2zGK3)s6jyd=Pi(^c0~lZO~; z#TzENFL;{&33_By1_5e!JRI~$>U8g?4E&2U%fx<-I&kXDO+WeC5g8d-yGVl$m}8vP zJ=aLH|L&Odu?J1;b8LVxLjKrX>#QauZi-iR_8rES($T1z8-UMlZ!f0Q^_;Awry zfJ-ujwwIk%M@xCa_K6d3T0(KTI1N#K-32|-D^{k-s=87}u}#0fqhA*~N4plzEX8bJ z6P z%3f%BsvkT;Ij($Ooqy;X9Zk;g&U!JV^H3z0AsEBk_H|&Bs0-58G;3ea66fKsWjRF1 z;Ws&~$DSEB?dJPqr~;RE+0Usuitrnff{%n$&OowW;m({ z#z*2g=?Sk0feGN&@Vz>R+jGW4saNE0j*0fFs6zv@8ZI17Q8qa7$O?>Hl{Y< z^9^GN6+CLbwe2|vjzW;>bes?l_kA}f7xCZxk zYdY@xt^m_YPyR0G@Ub)`q%&XbK}POFRAhwb`HVTr-@_#|o$5+`W7^j=Gz<*PMv@)g z2Tid_o>_>&wv7`6LgnEE&I|nXfAHhu)3R1CK?TY*Qa_M?Hk23_m*&fyb#}5t$VIam zG2C2eZ*ytciRsMg+%7KQwp&%<^s0A%(TYDlSoDAW)*~P*iw=-Y?qYyZKqec6AL6TW@2o6((nJ^y^p+l#_acogM*ac=DnUTC4i2H z2^MR22mTt{XV^?`{&=@JpYxcUZSs}rNw7C_WKS4mq4s5nj8Zl zq?i5t_3QWkRXzLo3iIK|j~^d;Hvaj9VZYeiKCQXBvLfW5=%A;k=jP^?bMUC95~t;% zY<>lEDT;d62lCur`uGXLiy6Au)mBRCHKN8~T==73_ z__vguoJ#bYnyuj#X?F3KmzQ8|*mMUc0h zl{BXN3m%^0_Rxtfhs5fzD&c*Gbrj;#;$k-1rQMR2V(n(1nW#MhWyILFm9?7m+SjCt z=>l)h4~`%7^wPrf@er?xyb*vWVPZcf(^Bx?g62lE$TWDXOv%C|=O zd(gsrFkQD3M;Bq>dlr}5!|8c-g#@g^o`aajt`HqarJ&@mgzZvNfNVorS}O1}!*}YF zsg{$g<+HUl;P2|@kCYTCr5|Z&wz9IjMfSvH(KFAHqahPY$*=`TbA#Ux}EW8mc`(67o*Z<*ZdzeBpmt|YW6J$rQ z^G3dPK9oiCFIchct_nIXzbn!guv+aghkMe$Zf(iP_$Cw76)Fi*G(v(tZNX1MQM3WZ zSFcb4Je@ZlU*5D_>^D$;x$fM6%cWCXgE)-&S>MUV5Xj74|M?_NuYiklc%dLG%f!a! z_web$d?@*9aLNG8ht-(AF@=_`CYFiIr~k@dwOyY zw-DFYH*>QyA;H+y)zzp0?P1Z1!N~&dLuJ3Zxmj6l;bU87qgyUe0`@2}ZZJH2K#V!v zw}lwChaF$t)&`>ko2N~iir;s5Stdu*XKz0qNS&-kb;I^&qB1A8{cewPS_1+Y%!Z|9 z6ds2C7mo2Z8~pC&tsz{I1eP2ZvEh8g?mWOS!uW!566~m5yo&|`(hkrD) zig!4t0AA|Lay?D?0lwnmQAKhNB)Yq1UCD`ecG~}@t1alXjCtLZz)5h+OIa>-unL!Q zv9Qp@LQTwc>!^437HbY#yxm$($Ci6~diIeE2Td14SnMpPXM3L-sJ5?sd~RN*%UH-g zK@DD;4Oz81DXl85u7liAKE@20yH@{1Oui18m-G2M!vYcVT6sP%d_F3Xv~S$=J1Ymo z7Vgf&j{v_*!;omabKMbfBAodnEq{06@c=o3V5;WOF0}iM$HD)N{r|_s)>Apd<9Akf zzmh{~zeWovX)6bjLo+biavJ1^>fO_zx922cLL+yDiEq#UzvTle`GHTqp5J<=-&+ho z50BDBa!3nVPF>mNIR(ebI9lc=E{bC6}Fz%}XL&*gv7Jyx% zHfv{fG@)b&Y<8ZeisRtzo>1R_gSz_+qXF+fbJj@Ux6_EE-8@2G!_y^0IyHN8JL;+2$zjeM6#4u=0fqiy5+dWr<{4Y zl8HmalvGsE0FVYtPv$(>VHdWxv|OU{JxROx&Zhs?{~jsT54-cdo6S>cFDfi5$Y;Xa zUDQ$6?i(Z|q7d{N*Ccd4`BFZHhHRfQ0dw}cS#x_BJ0J23DG>lFhI!R9YHV$l|A0KyX)sSpmV1&iIfsaSuIlHvu-?Lh8X%vu2j%*>JAIUGwyqYp z=IwTnUkJwb)mP_HQPLrAj@qtz5DaHtLI5@e z(Ho-?>@Udw7_c)jx-*j%$l4WNyK-LrQ5vN?z$wLcSfT>@|KF5kP=;8 zadFRXE^c*{los3`hi6U99W+0**BEefbEANzF5LfYuYLl=??eqC8v>HGRTcK57Sb{@ z)wWj+Sy>_3TTf!eZZ7cFkCF-t3(;=Q9mqE(cozh{E=%G5i>eSLNp$U4B*?7H-+hp>9zrPzyCxCOSj5N#MAi?MxMq?wn<)WW#QdL9W*7Wh_|0 zec+vm@|Lhb&4-jMTN#i9JHdi-k54_6E%5^Q;T=d9;}=SBn4iDxt#|<H z{?JGFtwHL5Qs*9AqnK1&7E5gj>i3PATC+B^-&iy+jbvTMi__*nYQk(VdGOGqJBp&b zx;mYo)d&IKDag-%Ng(s$#f#$HVc3J1rDZQWvma5?XSkYxBLJ?6*PBVdZzr} zziXR|_eTQnSXpOb_xHeSlj+0D>BQScT~ML8-F(^{aIm#CUw_}fDK!qsz@wbj z(9uCmkKmIN?*07>0ek{Kwg!kw;Zm}&u-Mqxy!E`*^cD9#{D}`hs7RD`^n9;Z!$YsH zGuwjN!|-sa1cSQ|J$zsif!bN>J!@HXoycSFx&|F>Z7O6-O0>Omuu^-44~|c#VnnB}H@B3(v$JZReixxpEl~5ly^SScC!xwOD&qJp zYpNC!m-P&oo}HPQ6TqhC%Xdv9?dlk)+(Wgsu^}hhdG=+}x{Q(N%k{OFfWS>#5Gsi4 znU(TXr=aa!li9`1>RG!U$5E0+JmYj#+F;z2P*RUq=Mqn-+2V?ei=UmIK?x`VRSPZ4 zxh+B1Vw0jd4-k#+7$BC4`pzIZ)zq8eoAzg4qmAgoYC3J}VtRc18N z!x%u3ItGxVkoLaO17^}w`iPx{-~c!-^SL;A zp^)IBPtdL|dirdTEZ0lOh&khG{SPldaWP2v_Z=3d4Coq6Wlqe_&X8w=YXDqHj-3@1 zRh+UlH8u8@mXthm9=Euk1TA#;){O+xk-E&7(zi2G$}bTijwzFTib2hl{4V5uiKcFHId6 z^+^)N$LfI!~I41`CuNkG>2+nh5rV3oPogut{y|2^498d+geaY z|D?LJbA>ED4kjjj@ZnWZ*$M+m7c3N)+R)ULl?W630gF&eE1Qwr2`GCi_>{>daCluv zNJWKAPfUiU^GN%wCrUv5>}+y!vi^RPo6X{wo0p4=iAM*vHThifc76-5?J6t~fk15f zyG2n5(Q|RhW+^{|Lh1EuM+^gX?q}a}v)rzAmXx=yudVOSH0@-Yj##<+-vu

XOW<9ruF; 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∾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 literal 0 HcmV?d00001