Skip to content

Instantly share code, notes, and snippets.

@martinmoene
Last active December 15, 2017 23:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save martinmoene/19018be709b00562bee9acf20ae05ae8 to your computer and use it in GitHub Desktop.
Save martinmoene/19018be709b00562bee9acf20ae05ae8 to your computer and use it in GitHub Desktop.
Simple C++98 functional algorithms for optional-lite
// Simple C++98 functional algorithms for optional-lite
#include <functional>
#include <optional.hpp>
#define RESULT_OF_T(F) typename nonstd::optional_lite::detail::result_of<F>::type
// map(f): perform an operation `U f(T)` on optional's
// content if present and return an nonstd::optional<U>.
template< typename F >
struct mapper
{
F f;
mapper( F f_ )
: f( f_ ) {}
template< typename T >
nonstd::optional< RESULT_OF_T(F) >
operator()( nonstd::optional<T> o ) const
{
if ( o.has_value() )
return f( o.value() );
return nonstd::nullopt;
}
};
// then(f): return operation `nonstd::optional<U> f(T)` on optional's
// content if present and return an nonstd::optional<U>.
template< typename F >
struct and_then
{
F f;
and_then( F f_ )
: f( f_ ) {}
template< typename T >
RESULT_OF_T(F)
operator()( nonstd::optional<T> o ) const
{
if ( o.has_value() )
return f( o.value() );
return nonstd::nullopt;
}
};
template< typename F >
struct result_of_pipe;
template< typename F >
struct result_of_pipe< mapper<F> >{ typedef nonstd::optional<RESULT_OF_T(F)> type; };
template< typename F >
struct result_of_pipe< and_then<F> >{ typedef RESULT_OF_T(F) type; };
#define RESULT_OF_PIPE_T(F) typename result_of_pipe<F>::type
template< typename F >
mapper<F> map( F f )
{
return mapper<F>( f );
}
template< typename F >
and_then<F> then( F f )
{
return and_then<F>( f );
}
template< typename T, typename F >
RESULT_OF_PIPE_T(F)
operator|( nonstd::optional<T> o, F f )
{
return f( o );
}
inline int double_int ( int arg ) { return 2 * arg; }
inline double half_double( double arg ) { return 0.5 * arg ; }
inline nonstd::optional<int> double_opt( int arg ) { return 2 * arg; }
inline nonstd::optional<int> fail_opt ( int arg ) { return nonstd::nullopt; }
#define END_WITH_HALF_DOUBLE 1
template< typename T >
#if END_WITH_HALF_DOUBLE
inline nonstd::optional<double>
#else
inline nonstd::optional<int>
#endif
pipe( nonstd::optional<T> o )
{
return o
| map( double_int )
| then( double_opt )
// | then( fail_opt )
#if END_WITH_HALF_DOUBLE
| map( half_double )
#endif
;
}
template< typename T >
inline int result( nonstd::optional<T> o )
{
return o.has_value() ? o.value() : -1;
}
int main(void)
{
return result( pipe( nonstd::optional<int>( 21 ) ) );
}
// cl -EHsc -I../include/nonstd/ -Doptional_EXPERIMENTAL_FUNCTIONAL_EXTENSTIONS=1 pipe-godbolt-c++98.cpp && pipe-godbolt-c++98.exe
https://gcc.godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAKxAEZSBnVAV2OUxAHIB6bgUgAMAQV4BqAMKoADgE9ieYAgKiIyAJSiATANoAWALTbaAdlEBZAIbECeAHbnUmW5kEj%2BwsUoJSGIXsEIEZgAjADo0AFtuCKsbWwjHZ25pG1RbCwAbfQzCFw93N1EAFQQ8BlE0LFEy0Rz2WwZMdFFmWyxiUQIETHMASSLRABk8esaVM361UNdeGe5igAlsUQBlAHkAMSKAdSEAJWXeldEABT21gDVegBFsa9E%2BTU0hY6PHzVJRbf6FtYBVAa7PZ7IQAOSKAE1RJtRGCoQBpXqg66fbAADTO2BWxzWezmol6ZhOg16d0%2BSPEgz%2B1yRAHFRAAhAGiUFrAYkiZFO7FNaLZZAkHg0k4jbmbB7cQLMFFIQM3okyGkfEbfqgrHHDa42GnfZFXriP6DfanP57E5rFbLMH3VmgpEbPZ07BmbDg0IE0Es3nYC6ugYrKWDQZ8/FCAG/PY4vYSNYnCGO2kLAa/Qa3SOM5Yk2WDZaa6NwiRGwmfa5CMxCWlY6HRtlLPH5Ia9WXy/oQz7bJZFOse2GeoTiPVrT0w8RDooggefIq4gZa2vi76Wz77I500QOtZmJUN/6z0VapEx0Fqge9IdfH581abHb7ZZarvLP6W6vQx/R25CEmg2mvUH4x9ry2IFsGmYRXEeABmKRiAsYAYlENJ2Ag8DNEgvAADM2kwDCvVBFYimuAB9WNB1BL8iIVbAiIWE4TggtCsAwuweltAjiNIs9yMGSj%2Bmo2j6PA1DIKYljREQqRUnSDIiJyAhMCI31Iy4h4nk0UJINCWh3hQwpJAiKQ8AyTAOiweTkCkkBdKg0TnAkqTMiI8Q6NoWgSL2IjaQOIQuWjFRRCIojkCkDJmAYEKwoeSDsD4SD7iMWgBEg4M1AYkScLElI8DSRznJOPR3M87zfPEiAAqCiLwtC8pYpiuKtB0XQBE0YNuAAKgeYxxD4LqArMFYLnESiwXpWrYvixrmuDNr5lS4TbJ6LKcpkvKTEKrzsB88VSvK4LqsqqK6omkwkuDcTOu63qiP6wbhp/Q7xoak7kvO0Q5qEfEwp6brNAZR4GRMUQGAIdAQBAJbpOqXCLAANwsIyLGCYyrKEj60Mw0QFvQMrAoQCwGCIuxkFCqp3qgzGMrsiHHKlFYiIpKlbjKqxgDe8TcfxwnbGJ5gsGZ4hWbJtDMAyRo0op5iqck7LpJol56dBSlqWwfnBfEgQ0qcfAMOsxjKcW6Xlrl30iPYkiTjIr8dupmTaYVpWmaiyRDek2q2ceAA2T37Jl3KXOMdbiu2oX0slg2HJk58sVNwjzcts6ypt43qLNzihytz3vbAMAk/RE5xUJP0KI2P5Ffjoj0S5fCyOOMnhIxpOo7p1OLa4r9dfQ7mSZ6WLnYjsbUfSCJMHCix2FEWw0mB5oer%2B1HXrCuxWensGbdiuehAXhgl6BkGweCCx0CIpOx/YBgGHX1wt53leQDxhgEEv%2BfzsX2xl73kBbGYDIMhSJ/N5ftvN%2Bu9Qaf2/r/SSRECD/2vsA2%2BdgiIhTHi4SCG9YHv1AQgpB7AoEyCkCgtBgCb4fywRkZBXMsAAA8YFELgSQ2wiCyE4Ogagq%2BtCMFg1IeQggeCFIsMIeJV%2BHCQBcJwXYKhUD/5sMEUA4R0gTIWCIMQcaKjWHCHQSA1e%2BDYJKOzqogRLRZGaPBtoxRJBe40JkcQ0B8idHmMgt1OKljDHWK0QopRY01EAKsXQmxpiPHRX0dIlxviwYxAANYKTXl4jRt8GAAHcLBSCkcYa4HcRZjDEI3S0zdY5p24h3Im3cnbIHxo0awA80adx5lUXu09MCUPYJJSpUEim8x7g45gNg5IyBaQ2G22RciiEyAoeIThlBoFsMxYArBFEyxRh9euWEmLiSTqOUEKpaTXSEGiIiX5ei0lBHLcQ8JxYLR9kbdZmztm7P2Yc458J1aazaJhQpyycKrJdrlIc1y7lHJePiSeEsLDfwIJ8L6zQ7CqXQrhLGEAQ5a1eajVp7zcIXNllcg5eyST3PlhsL8gwGT9lOcJCWmUvkrR%2BViv5ey6b4qDESk54l0AsCRnkKpiKdao08JkDC%2Bh5H2Fgm/HuABWBkv9QihFKGoBZNl9boscgybAOxsCujKjDT4v9PilDZmVX%2BTtHow1Ul7TQHtRBGt7qIHVdcqkYzhddFYQ0lIaEzqa0Q2d7VBTIW/QKIcyVSwjk5TcJx5TigdbdJSKwVKlQdU67a8xEoCFEPoUQIrk0qFjYpbalraAAE4BACDUAi0W7LybnLWcG0NHkbpxuUueJ5wlOVvP9U0cqhy/hDSImc%2BVFaiRVs8qCDtWa62ejbYOztmsS3drDgqylfacweXbbWqN9aG0cpeVyxZtrcJJyVSqtVvaQ0LvDcurinxjCfD0G9cWME4IIUScQWwS8ypSDCgga9pLb3wQsKIB9T635lXwAwRGyNRC6EgroNNGhxJiDsIQPAIyABecy0iiGCJgPGMNsodGQHjYV6Bnna2bbu5V2xVWgggIe/tNbh0rtBOey9UGb2wW/b%2Bqw/7gAvrfR%2Bqpogv33vY8%2BzGZQQMcDAwADivdB0QsH7A/T%2Br9K9YBOCTOBg0mCynf1GQyBPVAyg8AGQyDId1Kmp4EGU4RpFW6xAnGICPJw49UC4Xk/9VytQLBv2YHBHoGFMCKNYCPWVSzZ1ORcm5XERVNolR6pdcQIXRzzrDTRyNKlPH3EStO8lgapQmzDNOcS2lSXlopcnIig6gwWz8oV3jxXstCBNgRHy%2BpaWWj2AMUQ1WoJNuRejHdJXVrhcXUHaMMWYvxcrce5L4o6MPXqrQTQmWA2%2B1tvV6itx8WGiKEREuZcuJES5ESI0XI9l7HpB1xb4dlulaRP0JsJIABaYaSQEQK5ZzdaUG79bC4HKL2aupjao5Ngap7zxpY67oC7IWcvUX2fLA7xItqvaKz2kr0Og3Vzzh5Nz53kczqTmj10fwzBOSNNiJHNWUd1ZNnnEk4h%2Bjo5S/WzraEW1Q9W/TOm62wyDHa8zyCrP8fs6OERW4OYuTk7LZTq7aPWTonENgC2EuWe1el%2Bzg4GwiIAEU/j7JVNtHH66iPcvmLZ%2Bz3NFrOf%2Bq53Q7nPPedEL5/zdnfDEa%2B/lXQP2tr1gp3j1H7P1kEUx0RK9Buusbt0jZ53DmLcSCt4p0w3qZn28dwQALLueswvi/7T3vlIeC%2Bp4O4nlIXh0wD%2BODtZFtvnGJ6XNMgwIR0n2xCfOSvILdesybqP5vEKW9%2Bv9WoeBgiwWIMZlPaegvbvG4lxd47aNcTz37k2443KQnzvtkE/Rjih%2BV1Lo2aPl97OuMRc0SISrb7b%2BHjPn3A0DZz392LU%2Bj1JeB3P0HgT6q5oX1T6iq%2Bf8b6KFvnzgLovinLHEIEfkRCfuCPrnzu3h9n1jft9hFhtF7hdADv1hNs/hGtNqlu/ulkASrnvuzvsCCFCOfnAcFmskgUNr9iNv9r1IDlgSDp6GDvNl/qribOsjSPHK3hQZPlQflINpFqgaNgwRgdPieq/iwXgeDmgb1JRuIU/tWi/oztIUdKILmsat7HLKXnRAIGiH6oQbLGjusjKEiGGqWDKNdMqr8PcOQZfluiilnoIXfnQQ/owcodgSOrNulgtrjllhwdRAcGYJcNROIBcLwQ4fAc4a5K4XIXFh4ZIaoT4eDuwUQQ1r0I9sRL/oAW9hHvMBsCQJ0N0KIM7mChUFPHgO0KIINFevjLHn3oprQA7kUQMnJBwK7jfpgZ4cwSkXoOLK0CsjEUISgbnv4UtpctQcIWfrAVEQ2C5r9A7n5qnnZoYt5hPk4fnmEUOIHhiFjgQbvrLKpvJJQjBOJMcepsoo2lOuMZdkbBcacR0DJm1A8TBDNHkVfggYEejrsWcMHhDrcSFq8cQCHsCZOmLICUnMCSHu1MCe8Y2nMfwSAWVmsHLgrkUGkbLJPA0k0soLpjiZgM0tcRCT7gEUbNiY0oSXie1BSbifCYblZtEVsWVoaIMJVpiY5F/D/JJE8VyRkDyeCaWjvr7oGnyTyeJOVoMB8Y4b1mzibOrlrjriSHrt7pLiKVdnZhhERAAI5eY6ZaGQklaamak6l6niSupezElCn85GGOQmm6mZAwZtSez0lqlkmyzGk4SmmOnPEWmunCyIliCHz4ARzVBdztLp4ymZ4CGxHIHDbixtK1IOIYStAWTLYtIBlG5RnX7fE3Z6j7KPYeTPYYmkqJkdLiBwY2BIYmSyRlAsIxQIlZlMnIm/7r5CCb4JnhlJniA8L4JQKwSEAXyBLXE5npF/4r7N5/7tkAGdk1LlkEAgncC9l8IDkEBDkNkMnvYNjLmdCrnlDOBNCtpQqYAwwmTGaTLTKzKWS6RDwjxSDIK6YNAgydQMgTwWDDyjyOYlbtEvlvkfn3njxmTww6azydHfFcG3bpxSnqLsLGKTIhnpleJdY3HeKdCYCGaKIoJxbBCoCoA6YMifDLm3nFCEW8LEWihuzAzEDMAWQVEvKhmvSMWvSzydC8IrIDDLnrydRpIxLnTyQYXySWpMXiREXvk9BFCkX4LkWHS7zUW0XwXwbLS9wYSZCNBTifAbBuwsXLkrKiicWoLcVSKZkYxZLIkQXxzWSpI9RpJWXG74jqYmQGbjKZAgAO6pkRz6DAwyDGSiANLyQNAyy%2BCsX4K7nwxrkLKzCfEhZ5wFwujgjFylynhQUVxohVwERcQrBgWTEuFxm0EckyQHArCbYkQa5FAQAbCkBFDQaiXDyiBgyTxPl%2BKBrtFgxAVGRgzO6grHw6wOIbAQBVW1RgycVWn5VESFXFWbD7blWVXVVkViV1WfxmZNVXYtUgBtUZAdUjxdVOa9yaXRRDW8LSnNmIE5U0Fe43liWfk9ANXTy/m3lXUhY/ksX3UAU9DrUvm6SxIfzBmIKoB2DyTKK8U%2BLCJYClK9JA0hLCJOCiaEw9UGJCLGJlBERWCwTg3w1GLwIEwpncxSTOII2Y1ETAbDx40Y0kIEwwx/UEYQ340fx2YJCnlBRmYk2uIgB02oAM3IAwzM2hKs3oXs0KR%2BXjLc3CJs0M2akmTR7C3GKi0KQU1kLdIELBI02gKdUZAEDdVSLgRWXa33BiAvUPk3UfxJyrXrXpIloybzAxkjHxmDyXWvWPm3XPV20PnG1DJO3/kPnvWgWoz8VIKCUOLBXQ21USXFDmoPTCBUU0X6a2DyTACwQyTHEebQJa0CI6UfL/WYBx2OSJ0x2Woh0WrRSB2WJp24QDBwyhR8KHVA3AxzLIB0XAyh3l3MAdL3Bc1IVWVIXCAl1hmx3x2M1PlJ2Wo4V4WEXUU9AyULnN24L4L/zd0Z1Z0J1maD0B3D0ZCfAqXm1uwb2NDT2K0%2B3oV%2B1YVoa4X4WSVB3iVRSt2U0yWR20XQ1sqw0fUd0by%2B3y1H01UX1uzCXf233KD33GSw29yT2YBThaXGCvnd0cVV2vnWWa1CCv2YWWof0kWB3EV/AyXnS/3VAExE3j2MWuXb2V0z3gOwNeIIP%2B1xbIMYmF3f0/2T20VI24O9wh3UPLCuXAO71P08UbyuDkPv1zXB1f20NMVYNI0o0WDGYEOqVEM9wkPP28MH1v1IMCPiVCPCOvSiMEziPg0Dh8Bip6M8VsO7lT07mgXyNd2KOIMB1UOfBxJ4CIZ8Isg330P6ZaPECo3MN6MMj/giqGN1XGMyNcNwN8PKNSXzWsPqMiMuPYNETY1pmobCVSMlq71mPcMKMCX8NhO1V7Bn3EVFDNFCOaOxPuUyy9x7D9W0CpSF3sNj2cOpPBOWMUOoPhPONyXKAy1ETi12bd6MWzyQNF2sLmPwONOZPn2h2UXRMdNdOS0OIYmmpf19NsUfJQMz2DNpP5AhPWMqPjOF1YNTM4QS3m6ePzPzOF2LP4LsUDN/RDPpOH2hNjMDATNtOlF80c1mbCPaVLOl1XOGVkMjP3N5OtNR0vP00KTHG9zHHFBgMQNfOh36UwM3MWMZMAstNPPAsdNy1zI%2BWROfMXPLM/OkMv3/NbNZOf27OTOvOy14VYtYWYsK1QtnPgOB2XPwu/M8NIt3MksPNAu0UdOc2/nd3IMYvUsK1APbN8tM2zODUgD6XYAHUhWsuEu6SbOUPbOPM0ORPiR7OUtESC0x3CW4uHnfOKtDMqvNPB0YOauyXos6t6ssK6P6O%2BMLNMv9MmvrPDPItct5O2MfzbwONQJONou8u2uUL%2BX2sYlio%2BN%2BOGssvQNssXUe2AWYAEDAXI1SAfX72euquksoOr0xNxNSR1P1SEPh2oVWvltavRM/VSB/Ux0mRWsxsfJCs6vTNHNSv7Uyu8IdRuuz3EvZvctqO0NYPVu1sA3MOj3N2DuNvGtxtKsctKNevzU5PmviXaTkvPMjsZ2A3iDlP5NqATsoLLDTuiDlNtTLlqAVNVMIvusQSpIW1/l3me3JuptJLKt9srs7PLDDvoBHw1tbv%2BPrVptgybt1vbsh1I0FulPttysgBN2HtBOd0eucv9uAtBuuNEQU1VH%2BOMNiW9yYfoC5PzV8tt26MduysIfstIcLsoeovDlCBYOg0SO3sbwwR4BwzyQLKvSCvistsHPdPITQfys9B/D/yvpIwjCcd8WwvIMKX9wOLBKvRiPuNMcOIicdtwfbhltSc5sdN2u9xqcwfLltSaff0ydpAIVKXycwXCMQclNpD6fSsacKfCXIMgdjuqfSvLkmfqPNugtBQkcGdCfOfmlkeHXWeHRCdXO3s3vztWM0e1UUUavqPasMDbVw23PUcfsjZJfCMpdpdlMqBtQXtVPLDmkuuwvRg9t/NZtZeWvJcUupdq0a0OLRgQCezFdCPHuVezumvvvIPLtUMFPrs2uNfq07UteFcXt7vQvMsfLderPXu9s1f9eEfB1DdfsNf5cTdtempTeVMzfd3zcELxvIo63WX3v63jyG3LVGwm3PtGTpIbr3tW2uFvbPclYxWOhxUyg8Q7ZJXcQpVpU1z5H4iiJiaVBvXMAhQjCYWQr2AeYyCDLySfBtG5CfBwzyBJ1I8dH5DNrZwO0gy1nyTXZHII7y5N75yZW22JvXVLUZtbqXdvX3cgUkOZvIcVBkLnyfuuCiMMLYIyNQJwQUdvs1d2P%2BvKC9Clu8%2BMLkLiINKC%2Bsz1OIfnd63O1JspsPeozS/88BtK%2BUdmvExlLc/CB2A5B2Rg8Btg%2BAbM%2BcJ89MIC8pvACeNnP1TrW28y/MK8IK/O8qwaBkys%2BoV2YrH2AW8EDwopJpJs%2BZdi%2BOOS%2BVKm9iSh9hke%2BYDW8a8bUiJ2%2By/YSULe8OK9BaWu82%2BZ8p8ULy%2BO%2B9wF/RTwo8be2B/JusAh9Z/MLh/t2R9boG%2Bc/lDqsbkJ/m/N%2BOOh%2B8Jp/AXu86/Ll5%2BkdHtF/p9j/2%2B72T%2BsM1/%2B8GJB%2BN/J/j%2Bt88O2Ud/vsx8Btx90d989BJ8W9y%2BUIj/tUl86/n%2BT9V/T/3Bu/X/z%2B38V/5%2B1TL/MfBJr%2BPob/z9h9Xtou%2BRUQBEAMwjA0KGTZoCXQ2J6wZ013IngpCH59kw%2BxQaDNdzn7cIduHsC9gT1ARP8kBfCOCD73Eghxzk8A9olzFL6v9%2BqaApahgJb7tcyo6AtasXzP4587%2BbsG1HKjgFLUEBJPSAkaHJ45EJcWtXWvMEZ64DHu2sC7rwIoFo4kQAg/sD/knJU8O8%2BIBIJPBrocc5gWVWWJ90LjxVfuiVcuJXFdDpUdiWhN1NnHIG5BSsIRVkI1mOy/4O4ZA2QbYLRz2CLQMoJwZOREFCAJB13enq4EN5c8NBqALQbI2uYxchAUJMzJcTDJm8egebWxGYm3b%2BQwhEQz4BkJTbyQ2YScWklSV/I/97AhDLirA2ECxCny8Q4/sfTwoSR3E9iZYGVGyGYUshaQcITkJ6AaB8hjgSkpJCKEN9f%2BpQgyuUJiElZgSCQsSMkP8T2JHE1wZoe0MyEgDFhnQvISVgKH9CWKxQgJmUJ36VC1MjxSYXZGmENDAaR0BYZoM6FtDLhmFNYaKV6G4kBhwfHYSML2HjC4hhwmoScLsSA0eK8w5YTcOR4AiOhtw7oesIeGFCthgw%2BwMA12Ht99hJxM4l8JPr1CfheiOKBcJBFAiWhuQsEfcIJKbCmW2w4YYt1O5iCH2D1a7roL9inVpi4oYAeFEwDIAEMOQBxsUR6C3x7476TIMABICBAIgE%2BCQY7QD4Zc4ulSLBlyMtTMCcRHSDcnXzE51BJOlbUBH60cYpClE8KJgXQJAAyj66ygb2O1BhgzQ2YkLHoQSOTqoU6%2B39bYRrAhqjC52jhO9rwCFEgwpBJlS2m7ljJnUxiUZTlO90DT6DvuCVXbMlVMHVwMqIPfpBSgioFBXAAQunu7UfZflmqbtEUfkHmAhDyga8KPnFw/Y99ghXfWdHAwkFe00xekOPADGaLoVv4KGWwBPiwZ8lOKcjaIWa2QYLA/MBHPMcBSl7RNlyOQYGF/3C7d12xh8K1B2OcSQNux6fCPnA02IYENkWKcsLchxRHIpQJyYAZYEoTDIcgwAWwOCjGAJAG6ZReQBZFbQ7kMIRREZLuOHgx0YBocd0o5FLi9BtcKscSMRWkyvRG4doF8ZoCYFiVPggUb8NRCIi19YBD4yON%2BL%2BDYBfxD7TVGJDxFXYnxL4yCH%2BOHhwS7IpAw4o%2BMgnYAUJsEgfBhIfbQpyYiQlwVhJkg0pf8ZUHci6hFTdQhxvCELEhKgk4xlAV7a1hZEkRcsZKX458SxICgN0bUrYtVj2Oea/1deTLAYF2leHRDWgMsEARYFz5XiGEFoq0edCTiUTJyZUXDFYGvQQ0NJK4inq%2BIfgkBo6bE5xAZIORHIqJPdPSQYksn3IbJv8YBP9RIEWSSsmk/OGVAwi/xFEbk/SR5MMk2SWUIQHyoAPC4OTrJWk2oGkFZghS2Udk4JJFKMnaS8YHQDqOFNQrJSbJJk6wLZIynuTA0nk18a5I6iJSIpgUqySlJikuT9WBUgKUVKCnRSfJqAPyfVPsmVTHJ0U%2BKT5XalJTOpUUryTVLimspep5UrKQNOqn4dRAfUz4isjRyDAhwWyRaT%2BH6mNSqpTk2KcNPGlh4my4XLBn8FsDhJJ48SWwHA1eiHTjpqAU6f5A6i8SXxEAIiH7zKiXSTp9gTKRdKOlvSZpogV6ddLrEgA7pJWZiSrCenOI/pN0l6V9P%2BlgwgZgaEGY9Oem/ToZN0zKcEnEn2tkZV0yGT9JwEQzbAH43poXXuksSwZENDGZanxk/T8ZsMnFsTOBk4TEZziCmQHSplQzsZAMjKRAHxkup6Z8MxmWTO37RCoIgxD5CTLlFoRRZXxI2CDL8JVIpZTEnCZBA7gKzspk5M2nan1jYxxsC4rZDSheBsxTKXRXWTcmxRVS1xJKDvL9LGBfRiAnlfBMyOYhnjGJF4joMpJvEEA7xtpCiYZJeBlRWgEKd2HRLWlXZMUes32aoMFL%2BjQ5VKLZEuLNn3ILZwA64MmxMigC7I5oe4DuSICGIfMl4ncWMlvFkT1SRsfWSsGomoBkaBcoOfRNQrIMJ%2BTmQmvYyPruzxku9BgJ8Fbkx1mulDSucpIi6wdMgzdAecNV34ZMnYVDcUVWwLkezmu%2BvEZhPLVZTyN2M8tuY3LxjIBwkg41CjpJwzOIOKziLuWNy1IbzwkW/IAYhz4ZOxWg28Xca2iEDgoAqd85oJlTo7DtV53c3%2BAEGQDbzXoTgZgBEF/JwdL62oS1McFiiihN4rlcBTc0RZUdcxVDUScCyPka0U6wSf%2BYApYrALHoKCr%2BSMAsThcNGzcpzMzA/nHyiIp84gRoBTSqiSFVVWxsQowg0CB5GnE7h9DgXCSc2wwYGAwvF6Bs35vYr3o3NVG/ztORrD9rJ0Qq1zv60hP4UDEYXUTtm3Cz2XfA7FvRvOwjZBsorBjdBD4Gi2hvXKEVakRFDiLRXWSGrAVPgahSLp50YnwsL5880Xs3IDZqEeegivssIublSjwEXnfhXKID5cdYWFaE2WXO2wEpGUjyexaIIabLcl5AisSS4wkmvkpJcI2cWBImKyxipiikKrROkViL%2BxmMncmfQKWWoWZ/bUtm4ueb4zgmXzEOaXKalDTd56iupZkoaXGSEApk5pRVPWldShprk/di0schZLtpAy7pVdmGUtS/JoyiaT0sGmviepXQ/RWrKGnOSRpoUxZZ9XUmTSbJTSorksu2XRTcpygDKfstmXVTSpXSmZeMraV6otpJywZT7I2nNTfJxyy5Z%2BIOVDSFluM05dcqeUrKtpXy%2B5c/E%2BRnKbJbM3GezO%2Bl%2B8fl9Sv5a%2BKpkdQaZgMxitMveWgrop4KpFVzKxlQrLlwSRsWF0tEu9p%2BJKmSoX1K4hdSV5KslcSuCTUr6VxKurgyqpWMrKkzFVlRypJXBIUFy5IcpRxFnYRpZrSuFW6NwhGyY5Js%2BOTSiTnG55gCxBkElD1FtNW0ck1DDnI6UZBmgcHMCGPPZ6ILKkqq%2BwMDBIDeZJEaC4QKx3Y449UKGEeQFrA55G9okU/c6WIsuZwcUmiHDRkolNUACgmwK3eCauAB8J1UQ8wJpC29hGp3ozFAJcJWOJtMMOoa9VONOjXt9gk00uNVHQTUV0Q1FdThuGrdSRq6VMapivVUwDxIc1U9Hksv3NShrd6Saj6edHtGUFPR1tPKv6uNUsZg1Na3NaYxOZmpC14XNSUxQzWcS4OZUW%2BKC3rXJrG1O/NNdfRHXq0x13akxoxItJh0o1M6gxK9FLXlrl1CkKtX7z3V1rjEk69ddOrK6prGyjJcLtNKwDiSx1G6srluvOjuqD1%2BgWqAAD8yqDai9ZsvEjuqdykLDqK%2BoXI19wWg64tYxW2H4w8Ota2VufIg2XrUKAGxicBtrUHqi1z68SNBqHLiAUNqzX3s4ibXIa4NjE/Nf2sTUaBTRRpL0g6QyCYbguLzZ4WhtzUYa7Rs6m9aRpCoRrKNIWe0nqQY2ELzo2wljZWtA0/rDKUVF7rlXOr%2Br8NPQcjTxuzVUb3mScT0lqTo2CatO2G6ET9JA3EAENlojjSRp7Wrq%2B1e6mvmppwj8bMgWm60bptE37rxNRG4zbtOvVIkTqXoukaqXC4I1lJTQQmt6qDW696oyDW%2BP5qPgdrvMpShRfJv3bbjRkJCuLSPOgbcqC5AWqLcFuUDoBFEFgNJW3hyBCrvkkqnZAnNXHEo/1s3XCFgxYo3zRkraJpTlpTZeN5FDjJLVxswC0TuG3FBLc/MC2Bq%2BELq8SDECUkFyA2lCiGhFv62dqA2TWvLcr2FgoVAleLIrY8txTlzktyk5GgTCiVbplt4imrUyy22cwdyc2lrQU0WLjrYtHW6hR1kNmtbMAJC47Ttt4Rda4RvW5wJFqC2DbJt6Wr7QNtm25b8tL8QVSFjLmiro5lyWOabOlUVa5N19DqAepCwbCLR0arDUxvX6ewzt7GpDa9HTXvNEd4mvUcjohFEkjN6O7YVjqB047KtV8sVjmwM7BJ0GHUfGOHwg0U7dNdmLdjBGTZBR8Y9rP4M6Wr58YidEm4jVxwXn06xmjO8LugyA3DIGAYGpmuzsY3bCudoHHnerVKQDjVOxOoXa%2BKR1i7Z1cClXuILV5M9pxsq4TI0DfjeZmgEQzoEQK17RM%2BSKQM1ewoMS89CAevB5f3QOFnFXdkCFAZWXdjNiHF1IlbJwR2Jcg9iwearBMMD3q1lAie56uAjd0qLKyqTNhchRJJiA/KsEPjFYHGTdBt45QHOTztPL6sugPQQ8coFPKUId495YgI0AWSQtE9AbRPVAAnhp6g9tvQgMvzRnGUtybgD0aGVPgjxygJkYgOYlRiZi0Mh8Y%2BCVnH1c9XKCo8AbfDwXIBdW7jGfR7tcBr7kAkndTHUEIDz6j4J8ZAGfEV0brXKm%2B7fdPoM2qRNAB8ZoDbGGSX6J97wUPVEPD1W7sxuqzLpPLo5z7/98o%2BQFaqVFVbzU19BQhHFhnAZfMREVesVz1FwMD9kB/pvJqG1AkPhZxG2JZvBHmjgkrle%2BFmqnreTpGPGV6J8EmQa9PtbO8neLq2WBoJh%2BB7vT/HT13CrsKO4g1ak5juqKD5tR9aIBoNpA6DTQBg2jqYMiU%2Bu2zdBmyuYPLZE4FKBzoXXI2lEEA5QYQyQf4O1qyoxATQ1Kl0PKaqDm6xjRjH0OGHSDD60w8I1oPwxPt4QMzPGqXUGGGAThmOg4aaChAbDRupDXOM82trZNVy%2B4rgZBI242Db%2BtdW4bZgo7x1ZNIiJPC6DT74kREPzgusHzGQfeYMYBdob4Pk09DGh9w9Yd43CGh1jFCw0UaMMFGTDwh7%2BvYZYjoAPD96xNSev5qWH3DDRxw74fPWSbNylWhEfELYPybidSm4eXkZKO5rqJY9WwyIboriHtZuRhja5tlLSbvR9I/1YMcOHDGOtlgijRXVmM6Gaj5BgJrMdEOeHGj8R0BKetyOzH6m/qzvmUklTughAAsGqHRzRVXYJhx%2BkYKfrYM2DieBAqBDQOXBvGLSzx4ZG8cOP5GyDCkaY%2BMeCTnGFjZUMqsYldkPoqa4gV48AHXIQAWYDAKYJKj97LHcdfFd9nPr%2BA0Gu%2BEJ7E%2B8Y3KfHQjVQw4T8eZHKB/jbgwEwPwX5h96FiNJ9FWVZE1kSlHnQukZFBM4nwTkqSEziehOTGTjwDM4/Ma8PazUTYptEyQAxO9xaTH/fE4SdCDEmVdKxi/NIPFXZUvNoxDY3tvOgfr8DZRyDYp1whlQ5TqfA09psYpdHvDd6xJQ%2Bpc2kmYM8wMpKMg9kDGKUxqVEakPGhMCe9Serg%2BSVJ2o6zDQmnTY0AAHOJXoImroGUF9MhnQy3sdUfYn%2BFv71DMRkOKOQxRTELT3ub%2BnEcRoEwkjCAFI2kf5rbbb56QNlNkcHkHG11BNes42fSPOGo6mRrCqwxyOhrQJxpqzFIaTNQwmKTp4w83Rr6qIs5MxvY1UedOLmnExbSgxoCjypmIaf882pUfXO8y5FJbaI1YfnMunL6j0BU2zErIsjm5ZUNqCWbTPnQMkJ/R0zCZsNLnTjq5tw9UdhMbm5Ft5lTRce6O8bHoz5zQ6%2BZ03MbMzfKotf4dWMtrXumx0M3mZmG/DlDuZ8zSWfxJ9CEzT68w2ilehznjjV5n87efPPFHLzQFx6CWx3P2Y9z6O98zObIuAWTz9Fyg9RYAvfnNzy54eXef5MPmHGVxsJO0Zml4WJNB5sYEedoucXQtK5ni8eevOKXBLoFhYz4Ygv1QJ1ElqC1oZgsY7f%2BZ7UoAhcQ207yThYyk4xuQY3ntmt8f%2BogJ6pxYCaTDRdrVVviMcdGgXTtvglAbqcxzti7jR8cUPLQwz%2BZrC79NXMDrGD05uS%2BRerUemmjfF%2B4LfHRNWBMTBnetYZdYtWt7z1ZFE2JZADpXiAmVj/meuJP7nhNDm%2BC9mYeOWWnjUp2k6Wzx3X1LG7AMqNqb7UQn8Tdx%2B0%2BdBMs1BHoKeqq%2BJHyuCnCr6p4gJqYcTanq%2Bup545VYMTSGIB7PCk1ScasvGoTCh/9W1YwodW%2BT8GassQFrI66DQbsNU11ZNQewerUJu0%2BjsGvvH7gI19HeNcfPFAyoaptKxqYytamwT81t43qaWuIWIdpp8s7SMrOVaxACSV9vDqw4w2pA2F5bGGZfPNrAjqF1CjWZ7N6YGz10ps28yfJtMhzHZ7BeZqxu%2BtEkiN4xKDQyDl1jmXsavvFs8tMjabtmqVqc195sxXTbmzdFObdPK0wYCNwyxjEYrsWUrN5pS7hYvMJWFLAl8ei6iZYI2nzj1z4Ppbsl9Hv6rF%2BKxxdUv3AzzUtmizLd1u/mFbr5N66JckuaH1b/53c1vw1vCUtbn5lS5RclvXW1z8l42wxaKGGHzbqfGaY9ettMW7bowlNVDctrBBykp5ZvTma%2BNhGj1gGgneGaUTJoP%2BoFgcSrunM4bykKAlS6ivUZJWtLrG5zTTrQssGwjV6EY0DNOEp3Gbdm4SlnZMg52Pbeduw2IeVOF2xNBmvwzHcZP%2B6OgIx9QxFZmlK6nyfG2jQJoztumG71gMW6Uf0X1G27jRjuy6bqtWmQVsdpkzBAru7GML1dtqAQcDQ2b6Nk9%2Bzc8LKSN3Z7tR%2Be7GsXvgXlNq946qHIrM2017OBze/3d2OKa3UQ9/e2nbZM0bbV492zSffru6bz7M9r83PcY1errjElgu74YftjLe7iI8I/HbM1u2f7B9jUtZqAfH3YrU9sB%2BfAvuQOr70DzBh/FPXwPSjiD/o1JpQsyafRDJo4nHZZN/HMLtQjICPYbpmiCLddpitsOPMP3FtJJJh9nTjtD2EDCkVelw//v4jeHID/h7puduQQKKpqG2ENVMsL8WUI8RI3pkJpQ8a21gRmgZCsBlAp4/jW0ctdnVD6e7zD9%2Bxw5IcLm/7JOogwo6g1KPLz0kqx36bft93t7pmkKuoZsPUbD7uDvhxUc/P49c7ZDkSrjfiRn7F9gaZfdfuwPpndNVD%2B%2ByXdftbGt7NuEY2MavNWaNNE9/B9/UqNRPm7MT4oikYScX6r9hm1Xek9vveGfTWTx%2B2OTGrYANc2uXXKSB80hG7HfjvJ5/feZrrgnqmgB0ffCcOn/IFTo23UZc5xPanS%2Bj/efAaeZ3dNul08tpOafJXqHbTpB4M5Qf%2BOV13G8zTYaKdTO3HMzsqHM51sLOmKyR66cs6SerOUnnq0B88K2d%2B2MnTj3o8Rp5sR7QsENl%2B8EkeNc95DIV9e8g/iEjH3VJAF6dFZNETPQnxT4B6U8%2Bfr9lHooX51edcpaCRgfOs60v2%2BvTXfrIp18ZGv%2BfGaJdNXCky1dCtHPYXux%2BF4/vkPnPkXo9y52E%2BufVXnh2Lto9s6VNL2ej%2BLnIYS%2B13hsP%2BpLma%2BdeF1Uvu7Ged8xZbpdWWGX0Lpl4cLhe1qEXUVoJ5y/TsYvFH/Lj2xAuFd32/nYr2ukS/tZYH5X1LpCxObFWj6n7ILtta/bEAJBtYeAEyBfDhvNBbbCEuM646NcRP/I0T6c69ALtemXDlG1J%2BdGdMgSuLU6A50IEtWYVID00%2BC1o8cB1m9HqXKQIY612oATH8gJgA0Bkd%2BrX7nCsZhER2vQGsOvtsqBESCdjn7rjG8BygLuc2HejUb3Z80e9OtGljo1xxwpBAWwjU3AR11%2BaZfu0u9V2zOt1C4bdw8jrE1motFbbfTPzonb252AFHc19e350AuwusAuCu/btx6Swm88fjux6Qjp17pHTfaDwuebRN84if6ZaftcWfJ2od2f5ayzjkQMUXCMEhiAeYY8wfhAfehSJOwSIMm0CgTdBbAEADCDKiMv2B1R8kvgB7AEBOqDODuGgZh6TRqqSiHa1tKgGCBUAmR%2BmXCNXtWI1A0gIDRCDR/iRlAeg0G%2BwAfR4SzodVYL2Qzm0S70nGXjkcajzhKpTUKqA1cLh5iPjV7EP64B3Aa8Iv08ynn5%2BC%2B%2BuigRu3TaT54UwuKJlA1P2ABBx8%2BNfr8XrIN/1Z66SRIeUP2iV2YAo8xJ2MPWH9BkwoGpYfEIMI4j0olI/kfKPM5mjyfyzF2QpPqH4ZGh5UMUvuPQ43j2M349gvtmT/Ry4Ays5un8e%2BA8mpTV7hJxhPW2SamVXE8ldRzFdRjSj3C8JESs2X0T3l5mrquUtM9cLjECpuihcIf9rd2NZU%2BmX9PGnyJsSOokdfaohnyjqfZM/RmaHr0Cz4jeQ%2Br6TItn0Lw59QwEfppLn1KG56I8civPr%2Bnzww2o/dBaPgXnoMF7Y9FiHEMo2qJF7rnRfpK9b5Bgl7bMANXkyX7%2Bml4w4ZeA6WXrEBNVKrTUqqLC0NcV6O9xZdR9boK%2BylegNeyoTXhT617Yu6eGAnXyp9OfKPf0dPqn/r/s/R1af1%2BMowzd/RDuYvf%2Bpn8y%2BZ8tonX3zVn1ytsOr0VBMgIFLD9GCYXLek0/7nTDUA48yAUeTHljyF5thne53gB7ZrF4Yk5sbvMNe73kqYqpfWB6Xqopaje9FURPuXr77zJg5wc/v/%2B9lYZ0JWfiSfJacH/J5a%2B8u2v/kFH%2Bp/h%2Bae%2BX6/R6/G9gvr96fo386Fkm1%2BNAyfVPn%2BA8Cw%2BLfw%2Bbng77psT0zm39LPgyDwnZ87fmPYwbYdz5Vfzu%2BPNX678X0S%2Bi/GNT3/DjL/K/vf5fn3/Lz96K/TmSv/cQdaFzq9ZTHfftiH/r9Dc3OYfcP%2BZ1U4zOmWrfeHy99b/x8jfU3Y3%2BYA1%2BPgGaMI4Kaz9N5IB2ewv7iRzwIGc/4eVvHntbyQG88Uetv7I3b%2B5/29tAQvhAYPyZFD%2BsfdNzAHn2SdiV8fVuwnGr%2Bgw7%2B6umvnwOXaM7dTMBIfBv6H8b%2BwBdf1GPXyv6j9qP1/thzAO3/6YUlSBO/urHX935aBe/YgBm97PdD3m8nPPD1c9CPCfwDU7MDbxn8qPOfwC8F/ULwDddNFf0Y8Q/Tn3D9/EeSWYB4UbfxkNd/GL338oret1l8PvMTxmpgkY/2L9dfAAPQYr/Mvz5tlPI3z68Tfav0jdzfIYV689PF/z%2Bc0ZDZ2eF8AxVw9cMxNICoA7ORDxQ9KdLDw/83PDGAI9LfNz3vhhkPdVX9prbALAd2PQP2MwI/eq2IC0GGrydUP2J/i8tVDDX2CsBPc4gkCpAxFyYDUDG/0qM7/B/2EZ3/N/x98W/bxzDtrdSQJxoZYeFHJ9dNSn2QBWAbpjr0xzDGAap9AVnw0D1/ELwI83DAj0ICixcLiAw/A%2BJlk8izC/zNQ8LcDXL9uAjzz4COAnWzNcA7cn2gtW/e33mAU2SJECDigCwEiR2RPdUQgukHvGaCbYTVD8wsMFyT/pdA1AOX9PZWx0dJaglexv839VWn4QXmUblCAlbGaXgtD3Jv0FQtqNWhocebSHT0EMQWKiA9tsYwTbgeIMD2B5olRDjEA9gEWFrFHSCKz9cADBBTVZSAyF175bARIV8cUHBxwislzJG0s4p%2BUYzdRKEXPykVcPdQ2MwV%2Bb/l01pHShA0B0Re4GkcZAXmSa9KDVynBDZbB3G4sVHU41co2oLcR/M2oNGiAEcxJphsYP2B4NcAahHJw6BvhVIShDPg12Gg4fgs1D%2BD/vQEJyDRAYENEUlg91EgAsQ/ixZC0ZYzRrdvWIkNLZSQ94XscKQgJHEBqQtm2%2BD1DBkJw83YIENr5INbYQgBs4WEKih4Q82lcoVQsAAhD1Q9EJmkuQuLBxCZxfENGYBQ5BmJCTeJ4PAk/dV4LFDGhSUPo1aQmUP%2BCvgpkNHtvYVkPNV6%2BZ4QgBjMS1AhCTQm4IJC7gwUPj5rQjJTEdRQlEXeD5ODEX%2B8ImF0MZD5Q5kK9C99cLm2Fs4P0KdhRAQMLb4ReKPweZ7goUIjC7iTVzOJ7Qs4UjMEwlMI9Dfg10JpC5XZYAVCQQjMN00sww0J5Cgw/EH0gm9Mx3sBmPLoHYMIEVSVi4QwnNnzErQ54LJC3gzCw%2BCawn9zrD6Qz4Hb02JFx3kd0wn0PX5tQvMKFkCwvnwnCSw6cJFC%2B7WcNOF5w1cIbCpQxMOZCtxINyxJ4zNkJC8dw3kKQ1%2BQ2jkeDjwsu2jC6hCKypCFw5sNvCVw6MwDZ7wzkkfDvQjH1/4kQ7sLHCzQj8JJDSwl4PiFKw/8MvCAIukNzDYzB8JDdyjbYRgj8w00JRYLWcMK/CN7U8MrDe4R0OIFyNYCI4Mg9bCPAjcIpUN00SRPEODD4IkiKP4kImcMoiHEKM3oik9K8KdDpQ28MYiZIHg0gjCgjhwgBdw9iNFFxwgdm4iyImF0OE%2BIuYWojnQoCOHDODMCIkiIIzcKgj7AF8Ngj4FRSNQ5lIm0ImF1I6sPQinVG8KXDxI3R2YjV%2BYINvdCIjiOIiyWT8Ksi47PiNfF7I2sIbpvYBkNXCnIySMMjpIgiL3CiI9y28jEIlSPLDyQmMLnDhdOyNK8HI4KLdQ9I5yI3C8I1iOkZTI98K4ifIyMMXofwnTFjDzhDCNoidIhiJyiIo/KOeEJ3GKM8i4o43iEBhQ78IoiUo88LwIBIkcKgRhImiLEiGogyKajtw7ODkjolY3AkAS3PsPLctMIcJLI2o%2BLnEpiw0iN8iKopOwLNqwwKMXCso5cL1dmQmKwmjoIk%2Blki4Qg0ONsjUJJjFgPIhSM4j1osMMsiyo20JQjeon4XnDz/RyI1Qao0aKfD8Ii6N1CzXAujkVMQ/xjYiZo1aLzENo16LLCownqN/DMLf8P2jAIxyIZCfow6PXVAYsEOBiroiGKhCw6GpknYHouCK8iUGC0KPCtopGMqiUYsAGrCsY/UQLVhorSIxjFQ1yOeEkQvUKNQiYiGJJi96dhTfCLvcJjhjSohGPKjaYnaO3ZNI0SIxiz/TCNOiWIrmPxi9QiGMtRbol4VajHoimJDoqYzaLejrIz6IjN%2BI46N%2BjWYuWOxi7w3GJVi8KS6J5icw/mJRCU3bWPJj2ovWLkNqYw2L8jjY8UL2iMooKOZijopmLDMlYzmPX5uYsoMNDDUfxhaj5It2LWjKYz2INiJY96LUjfY2YUZjFYi2Myig4rCNbCtw86LtiQYtEILo5ha6LujBY4jWKjno/WPhjkI9OORi%2BogKIDiDovOMxjFYjmNBDbYzhxLjRQdWMLpNYqGKFj9w24InCxYhKJpi7QjOLOFEXIJxzjA4sM2tipI9kMjjS4mSidi446GJ1j3YieKnCp4j6Kbivo/qP%2Bj5Ys2Oxiw47uIjjVYqOJSIh4wqLJizIp6KTiGdL2NTijYo%2BJNjqokOIjUF4tuKXiu4tsJ7j7Y0GJSJN49yNdjCgFYAdkRLVtB5E%2BRLoAiBrgneMTjJwoQGmk5gtGKXi/4o9jdQ0wqdzNMgjRh3OgazGs0oRZgymz9DD1BFCiJINchLmDWQx%2BIITwbGd3dcUEh1S540EmcJMCwtD%2BHMDBOXy1lEFJSJESclDcZg5cC4oyP%2B8P2ZmzBoOzUxmF0ZXclyn4p1V8NHimmOfRDpMxZ42atKkbhNbjlgCJCiQKUTqzBNurKU16tJE6SLRjPrAfh9ZQEEq0xM5rFWAWsiTIqIatOEjawhcvE9wyattrOjn0S5Ob4KMTRE5aCKtfbE62FMmw6oDXpYQMxOutbrGUysT2QmxL/5kET4C%2BsP4RxL%2BsJTAGxxMgbUyJz1S0BOLzFS2LBJCS2DAYH1dkkrnwMTsrJhKH0NgmkVYTgjaLgu5zdR6lyBdIBGgkFXaf2n5UnRM3Rp5JBOh3RsGHS03xBGRZkWrJmgzkXxhuRDIF5F5ARBMFEOk4UUcU1rQsTQSJReZKlFtRLBJaQA%2BdA3RlfWZxX/tThTUVwEtEIJNzjQ4hT3XDcSKHyBi7Ys9TNdJRaDkuS2oKl1cpLHMzxHjleQZJdECMJVye4wbZpKISJkq9WdcmJHJBjgOIVuCgpQbeYDYg8kBFIB4qIGiDohgBfQBxTcUvFPxSCUwlKJTcU4ARWADMEKG%2BgKxXNHEw3KfwLCt4E5ZIQAkElog6BUeQSivwuycskg5LODclmB0YTlKdhufBAELc%2BkKpHOQKvBXw2BZqHNmYE%2BkjgBYFZ%2BXmlG4e5PaksDikwoDB9JvPjD79iAAfzm97AAj1H8oA9z1nRlMGqAbBaDcZBnMedG3WUBvfM%2B3sBZU0rwM4zvGuLk9l5YFga9tEJ8Ka9sDL1JMh6AkCTyMdPLUm/0VrN1LQTXoJ1KCST2NPxy8M/JX36kLknAWjSpFCJlQBr/AoMN9E4Xi2ocuA9kJ09UAZe0/4R3bYWYECfIzVTU4FMQBk9nfHAKH9wAgQFTS3QrejH9oA01M4BzUwoEtT9WDGBtSrU%2B1PX57PZtMbCXU9ROfiBfejirY4PGTx9SHcbAyk94PJwEDToTENKDSq3Hj0MCEI8LglSE0pNJ%2BFLkkdOvC3YDNOYDEzN00qMi01wNoYn/ItIG9GnZ4XLSvAv5IdF2E5BknS8uJrkblDIBbnHSKYj9M24v0rUh/Sj6f1O3ZVUh6HK4VtK5JMQgk3dLE8SuAlg4URYhLiQVg2ZVO/S8AVZjixF02dN6pyVLrjjTKvcqg0AquflXSUegeDJDQ18PL2lSxmSYO6pEELDKwpVUoLlijE4ydLAzdqN2DB85PZrxtjMfJJG9T8M4XX4zH4t1MnTcMhD24zC6WtL4zAEwuPh4Z06TJEzXxMTMgSI00gMnSqM3oBoySMh4AqE5wrqC1FGqa5LTST0jSj18BMngMQgdpYzRqFXJc6AWUuYZQFsS7UgWG/0QvTQB%2BkWYVJX3i7IL5TxgMgLUgWVAMUaX28PM02xC8BAUIDTQWdDzL8yt0GoSPSRI/6jdhnMlIDczpTTzO2FvM%2BLKd4ZJSeLsgUs3uDSzC6FSiMhEnHaFckWYHLJ99tRF6z6M0oc5FdBiIb4C7A5YQYA1xrgf4AZAcwUPBKT9VOjicJWsoiHayFgTrO6zesnMCKzaeUzNgypFBZS0oRqfzLmzb4J1TKyj2KFP31mMkzPWyDE2zJqTw/AzLdMxsXjOcz%2BlRjTGw5MjLP6F3oMQF6ZeoOTIqyZIFIHHMMYUbPGzJskXGmzrAx7IB9LPPg2CyiIL5RoSsyHH3EyUM%2BKNWzbJSYL2yjaA7NPTrMtD1zSTDM1zvTeNVyn0A12SBNckYgOwAgB8OZJLV0VglARAz4cm7kbDNssqE0BmiahNMixAYmGTRsABYAYA66fQF6BJUbgDLJuAa7nmB9Aa4Fzgtgr7h2C/uEwVSozBYHjihmiEDP0BeRdABwo1afQB/lGiBkGpTwgQt1XNZc%2BXMVyCAZXKpTxMUIAaR2UTgH3YNqTgBFROAUgDrFOAAQCtzUALgHlUgYFgDYAe4NCFoArcz2VtzTc/dnCQQAD2HUgRUYwAgxJMSCHExdAYwFoARUcTAvRzc3QCtybcu3NIAHczgCtzfAAQFIAvcu3P3Y4AWACQBIgQyGMgyACgFUB5ooyBMgUARPH7JWgcJFIBmINWl9dKAYIC4Ak84IDsArAGQC4APc0gEiAPZNYCeDO873NIAsAGIDfhkYIfPwA7MNMlPJfAIfONzQgjjk4Bu8jOnNyk8hcgMwW803NIAcgCO3gB92CGFnz9AbYGp9k0aeHGgVchTDVyaU/QDWBvMgXKFz84EXMMFdgkDwohDgjKjTyXc9gDoAzcrgEtzrczfOTyuAShHEwPYfQA9gbcQ3mAQIASeiOkNACAFwBCAIoigh6AOaIMhy8joBQK1AT3M3yi0UgD9zIIYwFCBdAU1BFRaAUAqjzNAcPNoBIIbfK4B48gAqHyU8tPJAAM8rPJ9y6CzgE0AE8wAuYLM83Av3Yo7beDSAQAXQCAA
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment