{"version":3,"file":"fbd8f7c2-7a2bb3acee3d3d180e4a.js","mappings":"sUAWaA,EAAe,CAC1B,MAAS,qBACT,KAAQ,4BACR,YAAe,aACf,OAAU,kBACV,QAAW,mhBACX,MAAS,gCACT,OAAU,8CACV,IAAO,kEACP,QAAW,WACX,SAAY,YACZ,KAAQ,YAEJC,EAAc,CAClBD,gBAEIE,EAAY,UACH,SAASC,EAAUC,GAG9B,IAH+B,WACjCC,GAEDD,EADIE,GAAKC,EAAAA,EAAAA,GAAAH,EAAAI,GAER,OAAOC,EAAAA,EAAAA,IAACP,EAASQ,OAAAC,OAAA,GAAKV,EAAiBK,EAAK,CAAED,WAAYA,EAAYO,QAAQ,eAK5EH,EAAAA,EAAAA,IAACI,EAAAA,EAAS,CAACC,MAAM,qBAAqBC,YAAY,aAAaC,OAAO,kBAAkBC,IAAI,mBAAmBC,YAAY,mhBAAmhBC,MAAM,iEAAiEC,QAAQ,kEAAkEC,SAAUf,EAAMe,SAASC,SAAUV,QAAQ,eAC10BH,EAAAA,EAAAA,IAACc,EAAAA,EAAW,CAACC,WAAYlB,EAAMe,SAAUI,WAAYnB,EAAMe,SAASC,SAAUI,WAAW,+BAA+BC,WAAW,+BAA+BC,WAAW,WAAWhB,QAAQ,iBAChMH,EAAAA,EAAAA,IAACoB,EAAAA,EAAU,CAACjB,QAAQ,gBACpBH,EAAAA,EAAAA,IAACqB,EAAAA,EAAc,CAAClB,QAAQ,oBACxBH,EAAAA,EAAAA,IAACsB,EAAAA,EAAS,CAACnB,QAAQ,eACnBH,EAAAA,EAAAA,IAAA,MACE,GAAM,WACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,YACR,aAAc,qBACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,aAC1BvB,EAAAA,EAAAA,IAAA,MACE,GAAM,QACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,SACR,aAAc,kBACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,UAC1BvB,EAAAA,EAAAA,IAAA,MACE,GAAM,WACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,YACR,aAAc,qBACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,aAC1BvB,EAAAA,EAAAA,IAAA,WACEA,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,wBAAsB,yBAElCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,uCAAqC,wCAEjDvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,wBAAsB,wBAEhCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OACbvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,8BAA4B,+BAExCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,+BAA6B,gCAEzCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,yBAAuB,0BAEnCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,6BAA2B,gCAI3CvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,yBAAuB,yBAEjCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OACbvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,0BAAwB,2BAEpCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,+CAA6C,gDAEzDvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,0BAAwB,6BAIxCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,mDAAiD,mDAE3DvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OACbvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,mBAAiB,oBAE7BvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,oBAAkB,oBAE5BvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OACbvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,iBAAe,uBAOrCvB,EAAAA,EAAAA,IAAA,MACE,GAAM,sBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,uBACR,aAAc,gCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,wBAC1BvB,EAAAA,EAAAA,IAAA,iEAA2DA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,kBAA4B,wCAAwCvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC/J,KAAQ,gDAA8C,gBACjC,sEAAsEvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACzG,KAAQ,sCAAoC,sCACD,uBAAuBvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,UAAoB,uHAAuHvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACjP,KAAQ,sFAAoF,uCAChD,8JAA8JvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,8CAAwD,sGAAsGvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC5Y,KAAQ,iCAA+B,gCACF,MACzCvB,EAAAA,EAAAA,IAAA,MACE,GAAM,qCACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,sCACR,aAAc,+CACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,uCAC1BvB,EAAAA,EAAAA,IAAA,sEACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,wBAElCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,4hBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,+DAAyDA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACtE,UAAa,iBAAe,QACZ,+BACpBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,WACV,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,kBAAgB,WACV,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,kBAAgB,QACb,yBACPvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1B,UAAa,kBAAgB,QACb,MAC1BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,kBAAgB,MACf,mBACtBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,woBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,MACE,GAAM,sBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,uBACR,aAAc,gCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,wBAC1BvB,EAAAA,EAAAA,IAAA,0CAAoCA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC9C,KAAQ,uBAAqB,WACb,mEAAmEvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACjG,KAAQ,uBAAqB,YACZ,yBACrBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,+CAA+CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChF,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,kBAAgB,QACb,QAC1BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,WACV,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,kBAAgB,WACV,iBAC3BvB,EAAAA,EAAAA,IAAA,sDAAgDA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC7D,UAAa,iBAAe,aACP,+CAA+CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACrF,UAAa,iBAAe,QACZ,MACpBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wgBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,KAAG,mFACrBvB,EAAAA,EAAAA,IAAA,0GAAoGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACjH,UAAa,iBAAe,OACb,MACnBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,OACd,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrC,UAAa,kBAAgB,WACV,iCAC3BvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,oeACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,MACE,GAAM,4BACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,6BACR,aAAc,sCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,8BAC1BvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACb,KAAQ,wDAAsD,OAClD,iLAChBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,OACd,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrC,UAAa,kBAAgB,WACV,2CAE3BvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,oeACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,UACK,MACXvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wiBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,qQACAA,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,ouCACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,2BAGpCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,OACd,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrC,UAAa,+BACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,8BAA4B,UAClBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,MAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,8BAA4B,SACxB,oGACzBvB,EAAAA,EAAAA,IAAA,8DAAwDA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACrE,UAAa,iBAAe,QACZ,2DACpBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,oCAAoCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrE,UAAa,kBAAgB,KAChB,qBAAqBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnD,UAAa,kBAAgB,MAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,gBAAc,QACX,WACxBvB,EAAAA,EAAAA,IAAA,MACE,GAAM,6BACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,8BACR,aAAc,uCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,+BAC1BvB,EAAAA,EAAAA,IAAA,oGACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,oCAAoCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrE,UAAa,gBAAc,OACZ,qJACvBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,grBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,QAAkB,sOAC3CvB,EAAAA,EAAAA,IAAA,0SACAA,EAAAA,EAAAA,IAAA,MACE,GAAM,uBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,wBACR,aAAc,iCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,yBAC1BvB,EAAAA,EAAAA,IAAA,4EAAsEA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACnF,UAAa,iBAAe,8BACU,gEAC1CvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,6CACxBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,gqBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,uFACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,OAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,gBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,gBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,iBAAe,OACb,QAAQvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACxC,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,kBAAgB,YACVvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACpC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,gBAAc,SACXvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,YACjBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACb,UAAa,qBAAmB,KACnB,YAAYvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,gBACbvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjB,UAAa,kBAAgB,KAChB,YAAYvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,qBAAmB,KACnB,OAAOvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,MACf,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACpC,UAAa,gBAAc,SACXvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjC,UAAa,qBAAmB,KACnB,2BACFvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC5B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,UACVvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAClC,UAAa,qBAAmB,KACnB,6BACAvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,UACVvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAClC,UAAa,qBAAmB,KACnB,wBACLvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,SACXvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjC,UAAa,qBAAmB,KACnB,uBACNvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACxB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,aACPvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrC,UAAa,qBAAmB,KACnB,oBACTvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,wCACoBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChE,UAAa,qBAAmB,KACnB,YACjBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACb,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,SAASvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACvC,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,aACN,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC3C,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,mBACVvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACpB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,kBACXvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,kBACFvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,qBAAmB,KACnB,mBACVvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACpB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,0BACHvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC3B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,YACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACpC,UAAa,qBAAmB,KACnB,0BACHvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC3B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,mEAC+CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC3F,UAAa,qBAAmB,KACnB,6BACAvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,OACZ,cACjBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACf,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,cACfvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACf,UAAa,iBAAe,YACTvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACpC,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,6BACAvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,UACT,cACpBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACf,UAAa,qBAAmB,KACnB,UACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACX,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,eACdvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,iBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAClB,UAAa,kBAAgB,KAChB,OAAOvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,kBAAgB,iBACLvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,gBAAc,8DAC0CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtF,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,kBACXvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnB,UAAa,kBAAgB,KAChB,OAAOvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,kBAAgB,iBACLvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,gBAAc,8DAC0CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtF,UAAa,qBAAmB,KACnB,UACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACX,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,sBACPvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACvB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,iBAAe,SACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjC,UAAa,qBAAmB,KACnB,+BACEvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChC,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,iBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAClB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,qBACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,uBACNvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACxB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,gBAAc,WACTvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,yBACJvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,iBAAe,UACXvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAClC,UAAa,qBAAmB,KACnB,uBACNvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACxB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,iBAAe,SACX,cACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACf,UAAa,qBAAmB,KACnB,UACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACX,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,qBACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,sBACPvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACvB,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,qBAAmB,KACnB,yBACJvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1B,UAAa,kBAAgB,KAChB,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,iBAAe,SACX,cACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACf,UAAa,qBAAmB,KACnB,UACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACX,UAAa,qBAAmB,MACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,qBAAmB,KACnB,MACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,qBAAmB,SAExCvB,EAAAA,EAAAA,IAAA,+BACAA,EAAAA,EAAAA,IAAA,WACEA,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,8BAA+BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KAC/D,UAAa,iBAAe,MACd,yCAClBvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,4BAA6BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KAC7D,UAAa,iBAAe,UACV,+DAA+DvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KAClG,UAAa,iBAAe,oCACgB,iBAAiBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KAC9E,UAAa,iBAAe,gCAEhCvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,wBAAyBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KACzD,UAAa,iBAAe,qCACiB,oDAAoDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC/G,KAAQ,uEAAqE,kCACtC,0HAC3CvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,QAASvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACtC,KAAQ,qDAAmD,sBAChC,iGAAiGvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KAC7I,UAAa,iBAAe,2BACO,yCAAyCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KAC7F,UAAa,iBAAe,sCACkB,MAClDvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,YAAavB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KAC7C,UAAa,iBAAe,aACP,QAAQvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC3C,KAAQ,uEAAqE,0BAC9C,oGAAoGvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KACpJ,UAAa,iBAAe,QACZ,gMACpBvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,QAASvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KACzC,UAAa,iBAAe,SACX,qFAAqFvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,KACvH,UAAa,iBAAe,sBACE,0CAEpCvB,EAAAA,EAAAA,IAAA,MACE,GAAM,2BACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,4BACR,aAAc,qCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,6BAC1BvB,EAAAA,EAAAA,IAAA,iGAA2FA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACxG,UAAa,iBAAe,oCACgB,0BAA0BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACvF,UAAa,iBAAe,qCACiB,iLAAiLvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,kBAA4B,WACpRvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,4qBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,2JAAqJA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC/J,KAAQ,6BAA2B,yBACL,8EAClCvB,EAAAA,EAAAA,IAAA,kIACAA,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,g3BACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,2BAAqBA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,eAAyB,gEACpEvB,EAAAA,EAAAA,IAAA,WACEA,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,iCACnBvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,8BACnBvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,gCACnBvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,4BACnBvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,MAAI,wBAErBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wkBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,MACE,GAAM,uBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,wBACR,aAAc,iCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,yBAC1BvB,EAAAA,EAAAA,IAAA,qZACAA,EAAAA,EAAAA,IAAA,yKAAmKA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC7K,KAAQ,2BAAyB,WACjB,MAAMvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACpC,KAAQ,iCAA+B,kBAChB,QAAQvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC7C,KAAQ,uBAAqB,YACZ,mGACrBvB,EAAAA,EAAAA,IAAA,0EACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,4GAGlCvB,EAAAA,EAAAA,IAAA,mGAA6FA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC1G,UAAa,iBAAe,4BACQ,MACxCvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,uDAElCvB,EAAAA,EAAAA,IAAA,0FACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,wDAElCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,gOACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,4KACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,4EAGlCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,w2BACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,+LACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,kCACOvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAClD,UAAa,4BAA0B,YAE/CvB,EAAAA,EAAAA,IAAA,0PACAA,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,4TACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,kCACOvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAClD,UAAa,4BAA0B,QACvB,QAAQvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,gBAAc,qBAEnCvB,EAAAA,EAAAA,IAAA,gQACAA,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,MACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wTACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,MACE,GAAM,wBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,yBACR,aAAc,kCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,0BAC1BvB,EAAAA,EAAAA,IAAA,8LAAwLA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,UAAoB,+CAA+CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC9R,UAAa,iBAAe,yBACK,MACrCvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,uDAElCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wRACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,4IACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,0CACxBvB,EAAAA,EAAAA,IAAA,qEACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,oBACPvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACpC,UAAa,iBAAe,SACX,4CAEzBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,4SACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,iBAAe,yBACK,yDAAyDvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC3G,UAAa,iBAAe,iBACH,mGAC7BvB,EAAAA,EAAAA,IAAA,sEACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,WACV,wBAC3BvB,EAAAA,EAAAA,IAAA,MACE,GAAM,6CACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,8CACR,aAAc,uDACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,+CAC1BvB,EAAAA,EAAAA,IAAA,wPACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,gIAIlCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACb,KAAQ,oHAAkH,mCAClF,2MAC5CvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wmBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,4TACAA,EAAAA,EAAAA,IAAA,2BAAqBA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,aAAuB,iBAAiBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChG,UAAa,iBAAe,QACZ,aAAavB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,aAAuB,MAC9EvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,waACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,2BAAqBA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,WAAqB,uIAAuIvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACpN,UAAa,iBAAe,qBACC,wBACjCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,oeACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,gCAA0BA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,aAAuB,6MACvEvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,gwBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,MACE,GAAM,wBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,yBACR,aAAc,kCACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,0BAC1BvB,EAAAA,EAAAA,IAAA,gSACAA,EAAAA,EAAAA,IAAA,wHAAkHA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC5H,KAAQ,uDAAqD,uCACjB,4CAA4CvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACtG,KAAQ,kIAAgI,gCACnG,kDACzCvB,EAAAA,EAAAA,IAAA,MACE,GAAM,iDACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,kDACR,aAAc,2DACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,mDAC1BvB,EAAAA,EAAAA,IAAA,+MAAyMA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,mBAA6B,MAC5PvB,EAAAA,EAAAA,IAAA,MACE,GAAM,iBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,kBACR,aAAc,2BACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,mBAC1BvB,EAAAA,EAAAA,IAAA,6BAAuBA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACjC,KAAQ,yDAAuD,kBACxC,uDAC3BvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wuBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,qEAA+DA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,UAAoB,aACzGvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wpBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,yEAAmEA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,oBAA8B,iFAAiFvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAClN,KAAQ,oFAAkF,oBACjE,kBAAkBvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,UAAoB,uCACzFvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wsBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,gBAAUA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACpB,KAAQ,yBAAuB,uBACH,mCAAmCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChF,UAAa,iBAAe,qCACiB,wBAAwBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACtF,UAAa,iBAAe,uCACmB,8BAA8BvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,sBAAgC,wBAAwBvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,0BAAoC,gCACzNvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,46BACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,2LAAqLA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC/L,KAAQ,8BAA4B,WACpB,MAAMvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACpC,KAAQ,6BAA2B,MACxB,SAASvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAClC,KAAQ,uDAAqD,OACjD,oBAChBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,ovBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,8BAAwBA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAClC,KAAQ,qDAAmD,yBAC7B,0BAClCvB,EAAAA,EAAAA,IAAA,MACE,GAAM,kBACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,mBACR,aAAc,4BACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,oBAC1BvB,EAAAA,EAAAA,IAAA,mCAA6BA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IACvC,KAAQ,gEAA8D,wBACzC,6DACjCvB,EAAAA,EAAAA,IAAA,WACEA,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,uEAAqE,yCAEjFvB,EAAAA,EAAAA,IAAA,MAAIuB,WAAW,OAAKvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KAC9B,KAAQ,0FAAwF,sCAGtGvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,g4CACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,wkBACAA,EAAAA,EAAAA,IAAA,MACE,GAAM,eACN,MAAS,CACP,SAAY,cAEbA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,KACb,KAAQ,gBACR,aAAc,yBACd,UAAa,4BACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,IACf,cAAe,OACf,UAAa,QACb,OAAU,KACV,QAAW,MACX,QAAW,YACX,MAAS,OACRvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,SAAY,UACZ,EAAK,oVACa,iBAC1BvB,EAAAA,EAAAA,IAAA,oRAA8QA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC3R,UAAa,iBAAe,UACV,aACtBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,WACV,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,kBAAgB,WACV,YAAYvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChD,UAAa,kBAAgB,WAErCvB,EAAAA,EAAAA,IAAA,iMAA2LA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACxM,UAAa,iBAAe,oBACA,MAChCvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,QACb,wBACxBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,sBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,ogBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,yDACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,8BAA4B,WACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnC,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,gBAClBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACxC,UAAa,kBAAgB,KAChB,QACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,iBACjBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,iBACjBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,sBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9C,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,kBAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,mBACfvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC3C,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,yBACTvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjD,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,sBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9C,UAAa,kBAAgB,KAChB,2BACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,qBACbvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC7C,UAAa,kBAAgB,KAChB,YACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,kBAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,KAChB,yCACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,yBACTvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjD,UAAa,kBAAgB,KAChB,2CACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,eACnBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACvC,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,iBAAe,sBACE,MACxCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,gBAClBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACxC,UAAa,kBAAgB,MAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,gBAAc,MACb,OACxBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,mBACfvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC3C,UAAa,kBAAgB,KAChB,QACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,yBACTvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACjD,UAAa,kBAAgB,KAChB,QACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,2BACPvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnD,UAAa,kBAAgB,KAChB,QACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,cACpBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,cACpBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,KAChB,QACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,cACpBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,KAChB,QACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,kBAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,KAChB,0BACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,oBACdvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC5C,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,kBAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,KAChB,SACrBvB,EAAAA,EAAAA,IAAA,8BAAwBA,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAClC,KAAQ,+BAA6B,mBACb,yNAAyNvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,2BAAqC,4DAChTvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,iDAA2D,8CAA8CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC/I,UAAa,iBAAe,iBACH,mCAC7BvB,EAAAA,EAAAA,IAAA,qDAA+CA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,aAAuB,6CAA6CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACtJ,UAAa,iBAAe,eACL,kBAAkBvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,gBAA0B,qEAAqEvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC/K,UAAa,iBAAe,oBACA,8CAChCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,4XACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,wFAAkFA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC/F,UAAa,iBAAe,eACL,qIAC3BvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,8BAA4B,kBAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,KAChB,0BACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,oBACdvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC5C,UAAa,kBAAgB,KAChB,SACvBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,8BAA4B,kBAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,kBAAgB,KAChB,SACrBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wnBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,uFAAiFA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC9F,UAAa,iBAAe,wBACI,kGAAkGvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACnJ,UAAa,iBAAe,WACT,iEACvBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,uBACxBvB,EAAAA,EAAAA,IAAA,gCAA0BA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACvC,UAAa,iBAAe,wBACI,2BAA2BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC5E,UAAa,iBAAe,WACT,MACvBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,4BAA0B,QACvB,aAAavB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9C,UAAa,kBAAgB,KAChB,4BACrBvB,EAAAA,EAAAA,IAAA,wCACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,gCACxBvB,EAAAA,EAAAA,IAAA,kFAA4EA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACzF,UAAa,iBAAe,WACT,qCAAqCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACzE,UAAa,iBAAe,aACP,YACzBvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,WACV,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACzC,UAAa,kBAAgB,WACV,gBAC7BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,kBAAgB,WACV,YAC3BvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,oxBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,mDACAA,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,oCAAoCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACrE,UAAa,kBAAgB,KAChB,qBAAqBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACnD,UAAa,kBAAgB,MAChBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC9B,UAAa,gBAAc,MACb,aACxBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,kBAAgB,QACb,4BAC1BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACP,UAAa,kBAAgB,QACb,+BACxBvB,EAAAA,EAAAA,IAAA,oGAA8FA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC3G,UAAa,iBAAe,UACV,4CAA4CvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC/E,UAAa,iBAAe,uBACG,0BAA0BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC1E,UAAa,iBAAe,WACT,MACvBvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,ofACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,0DAAoDA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACjE,UAAa,iBAAe,WACT,YAAYvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,QAAkB,kBAAkBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC1G,UAAa,iBAAe,kBACF,mCAAmCvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,IAC3E,KAAQ,0DAAwD,oBACvC,2TAC7BvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wsCACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,iIAA2HA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACxI,UAAa,iBAAe,4BACQ,2FAA2FvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,SAAmB,MAC5KvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,oBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,o9BACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,QAAkB,mBAAmBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC3E,UAAa,iBAAe,kBACF,8BAA8BvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACzE,UAAa,iBAAe,oBACA,MAChCvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,gDAIlCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,SAAmB,6BAA6BvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,aAAuB,8DACtHvB,EAAAA,EAAAA,IAAA,iFAA2EA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACxF,UAAa,iBAAe,iBACH,wCAAwCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAClF,UAAa,iBAAe,WACT,+EAA+EvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACnH,UAAa,iBAAe,aACP,iFAAiFvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACvH,UAAa,iBAAe,8BACU,iCAC1CvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,iBAAe,uBAElCvB,EAAAA,EAAAA,IAAA,gGAA0FA,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,KAAG,uBAAiC,gCAAgCvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAC9L,UAAa,iBAAe,uBACG,MACnCvB,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,oiCACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAAA,yBAAmBA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChC,UAAa,iBAAe,iBACH,2BAC7BvB,EAAAA,EAAAA,IAAA,OACE,UAAa,mBACb,gBAAiB,SAChBA,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,MACf,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,MAChB,UAAa,kBACZvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAChB,UAAa,kBAAgB,QACb,KAAKvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OACtC,UAAa,kBAAgB,SACZ,QAAQvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,OAC1C,UAAa,gBAAc,OACZ,qBACvBvB,EAAAA,EAAAA,IAAA,yIACAA,EAAAA,EAAAA,IAAA,UAAGA,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IAChB,UAAa,4BACb,MAAS,CACP,SAAY,WACZ,QAAW,QACX,WAAc,OACd,YAAe,OACf,SAAY,UACb,YAEDvB,EAAAA,EAAAA,IAAA,KAAGuB,WAAW,OACZ,UAAa,yBACb,KAAQ,qEACR,MAAS,CACP,QAAW,SAEb,OAAU,SACV,IAAO,YAAU,UAErBvB,EAAAA,EAAAA,IAAA,QAAMuB,WAAW,IACX,UAAa,qCACb,MAAS,CACP,cAAiB,qBACjB,SAAY,WACZ,OAAU,IACV,KAAQ,IACR,gBAAmB,wpBACnB,eAAkB,QAClB,QAAW,WAEL,QAChBvB,EAAAA,EAAAA,IAAA,WAASuB,WAAW,KAAG,gBACfvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,gBACEvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UAC7B,OAAU,CAAC,2EAA4E,2EAA4E,4EACnK,MAAS,kCACT,KAAQ,eACE,gBACZvB,EAAAA,EAAAA,IAAA,UAAQuB,WAAW,UACjB,OAAU,CAAC,0EAA2E,0EAA2E,2EACjK,MAAS,kCACT,KAAQ,cACE,gBACZvB,EAAAA,EAAAA,IAAA,OAAKuB,WAAW,UACd,UAAa,0BACb,IAAO,qEACP,IAAO,iCACP,MAAS,iCACT,QAAW,OACX,SAAY,QACZ,MAAS,CACP,MAAS,OACT,OAAU,OACV,OAAU,IACV,cAAiB,SACjB,SAAY,WACZ,IAAO,IACP,KAAQ,OAEH,cACD,QACZ,YAEJvB,EAAAA,EAAAA,IAACsB,EAAAA,EAAS,CAACnB,QAAQ,eACnBH,EAAAA,EAAAA,IAACwB,EAAAA,EAAQ,CAACrB,QAAQ,aAGtB,CAEAT,EAAW+B,gBAAiB,C","sources":["webpack://instar-wiki/./src/pages/Software/Linux/Node-RED/index.mdx"],"sourcesContent":["import * as React from 'react'\n  /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport { EuiSpacer } from '@elastic/eui';\nimport PrimaryBoxInfo from 'components/Advanced_User/All_Node-RED_Tutorials/PrimaryBox';\nimport NavButtons from 'components/Software/Linux/NavButtons';\nimport ForumBox from 'components/Software/Linux/Node-RED/ForumBox';\nimport BreadCrumbs from 'components/Layout/BreadCrumbs';\nimport SEOHelmet from 'components/Layout/SEOHelmet';\nexport const _frontmatter = {\n  \"title\": \"Node-RED on Debian\",\n  \"path\": \"/Software/Linux/Node-RED/\",\n  \"dateChanged\": \"2018-09-20\",\n  \"author\": \"Mike Polinowski\",\n  \"excerpt\": \"Node-RED is a programming tool for wiring together hardware devices like your INSTAR IP camera and APIs & online services. It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes providing inter-connectivity between your cameras REST API and IoT protocols like MQTT (Message Queuing Telemetry Transport). Compatible with the camera models IN-6001 HD, IN-6012 HD, IN-6014 HD, IN-5905 HD, IN-5907 HD, IN-7011 HD, IN-8003 Full HD, IN-8015 Full HD, IN-9008 Full HD, IN-9020 Full HD\",\n  \"image\": \"./AU_SearchThumb_Node-RED.png\",\n  \"social\": \"/images/Search/AU_SearchThumb_Node-RED.webp\",\n  \"toc\": \"/images/Search/TOC_Icons/Wiki_Tiles_Advanced_NodeRED_white.webp\",\n  \"chapter\": \"Software\",\n  \"category\": \"smarthome\",\n  \"type\": \"Node-RED\"\n};\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = \"wrapper\";\nexport default function MDXContent({\n  components,\n  ...props\n}) {\n  return <MDXLayout {...layoutProps} {...props} components={components} mdxType=\"MDXLayout\">\n\n\n\n\n    <SEOHelmet title='Node-RED on Debian' dateChanged='2017-12-08' author='Mike Polinowski' tag='INSTAR IP Camera' description='Node-RED is a programming tool for wiring together hardware devices like your INSTAR IP camera and APIs & online services. It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes providing inter-connectivity between your cameras REST API and IoT protocols like MQTT (Message Queuing Telemetry Transport). Compatible with the camera models IN-6001 HD, IN-6012 HD, IN-6014 HD, IN-5905 HD, IN-5907 HD, IN-7011 HD, IN-8003 Full HD, IN-8015 Full HD, IN-9008 Full HD, IN-9020 Full HD' image='/images/Search/TOC_Icons/Wiki_Tiles_Advanced_NodeRED_white.png' twitter='/images/Search/TOC_Icons/Wiki_Tiles_Advanced_NodeRED_white.webp' location={props.location.pathname} mdxType=\"SEOHelmet\" />\n    <BreadCrumbs locationBC={props.location} locationEN={props.location.pathname} locationDE='/de/Software/Linux/Node-RED/' locationFR='/fr/Software/Linux/Node-RED/' crumbLabel=\"Node-RED\" mdxType=\"BreadCrumbs\" />\n    <NavButtons mdxType=\"NavButtons\" />\n    <PrimaryBoxInfo mdxType=\"PrimaryBoxInfo\" />\n    <EuiSpacer mdxType=\"EuiSpacer\" />\n    <h1 {...{\n      \"id\": \"software\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h1\" {...{\n        \"href\": \"#software\",\n        \"aria-label\": \"software permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Software`}</h1>\n    <h2 {...{\n      \"id\": \"linux\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h2\" {...{\n        \"href\": \"#linux\",\n        \"aria-label\": \"linux permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`LINUX`}</h2>\n    <h3 {...{\n      \"id\": \"node-red\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#node-red\",\n        \"aria-label\": \"node red permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Node-RED`}</h3>\n    <ul>\n      <li parentName=\"ul\"><a parentName=\"li\" {...{\n          \"href\": \"#debian-installation\"\n        }}>{`Debian Installation`}</a></li>\n      <li parentName=\"ul\"><a parentName=\"li\" {...{\n          \"href\": \"#creating-a-node-administrator-user\"\n        }}>{`Creating a Node Administrator User`}</a></li>\n      <li parentName=\"ul\"><a parentName=\"li\" {...{\n          \"href\": \"#installing-node-red\"\n        }}>{`Installing Node-RED`}</a>\n        <ul parentName=\"li\">\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#run-node-red-as-a-service\"\n            }}>{`Run Node-RED as a Service`}</a></li>\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#create-the-ssl-certificate\"\n            }}>{`Create the SSL Certificate`}</a></li>\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#configuring-node-red\"\n            }}>{`Configuring Node-RED`}</a></li>\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#the-node-red-admin-panel\"\n            }}>{`The Node-RED Admin Panel`}</a></li>\n        </ul>\n      </li>\n      <li parentName=\"ul\"><a parentName=\"li\" {...{\n          \"href\": \"#installing-mosquitto\"\n        }}>{`Installing Mosquitto`}</a>\n        <ul parentName=\"li\">\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#configuring-mosquitto\"\n            }}>{`Configuring Mosquitto`}</a></li>\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#testing-mosquitto-from-an-external-machine\"\n            }}>{`Testing Mosquitto from an external Machine`}</a></li>\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#adding-ssl-encryption\"\n            }}>{`Adding SSL Encryption`}</a></li>\n        </ul>\n      </li>\n      <li parentName=\"ul\"><a parentName=\"li\" {...{\n          \"href\": \"#using-node-red-to-communicate-with-your-camera\"\n        }}>{`Using Node-RED to communicate with your Camera`}</a>\n        <ul parentName=\"li\">\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#alarm-set-flow\"\n            }}>{`Alarm SET Flow`}</a></li>\n          <li parentName=\"ul\"><a parentName=\"li\" {...{\n              \"href\": \"#alarm-recording\"\n            }}>{`Alarm Recording`}</a>\n            <ul parentName=\"li\">\n              <li parentName=\"ul\"><a parentName=\"li\" {...{\n                  \"href\": \"#ftp-snapshot\"\n                }}>{`FTP Snapshot`}</a></li>\n            </ul>\n          </li>\n        </ul>\n      </li>\n    </ul>\n    <h2 {...{\n      \"id\": \"debian-installation\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h2\" {...{\n        \"href\": \"#debian-installation\",\n        \"aria-label\": \"debian installation permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Debian Installation`}</h2>\n    <p>{`We choose to install Node-RED through Node.js under `}<strong parentName=\"p\">{`Debian 9 Linux`}</strong>{` on our mini PC - you can check the `}<a parentName=\"p\" {...{\n        \"href\": \"https://nodejs.org/download/package-manager/\"\n      }}>{`Node.js Wiki`}</a>{` for more Linux flavours. To create the installation USB stick we `}<a parentName=\"p\" {...{\n        \"href\": \"https://www.debian.org/CD/netinst/\"\n      }}>{`downloaded the minimal amd64 image`}</a>{` and used the tool `}<strong parentName=\"p\">{`Etcher`}</strong>{` to prepare the USB stick. We used the same approach to prepare a SD card with the openHABian image - you can just `}<a parentName=\"p\" {...{\n        \"href\": \"/en/Advanced_User/openHABian_on_Raspberry_Pi/#install-openhabian-on-a-raspberry-pi\"\n      }}>{`follow the steps from that tutorial`}</a>{`. Once the USB stick is ready, deactivate secure boot in your mini PC's BIOS and boot from the stick. We are not going to need a desktop environment. But `}<strong parentName=\"p\">{`make sure that you install the SSH service`}</strong>{` - as we are going to use the SSH service to set up the Debian server. For more details, read our `}<a parentName=\"p\" {...{\n        \"href\": \"/en/Software/Linux/MotionEye/\"\n      }}>{`MotionEye Installation Guide`}</a>{`.`}</p>\n    <h2 {...{\n      \"id\": \"creating-a-node-administrator-user\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h2\" {...{\n        \"href\": \"#creating-a-node-administrator-user\",\n        \"aria-label\": \"creating a node administrator user permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Creating a Node Administrator User`}</h2>\n    <p>{`Let's create a user to administer the Node.js processes:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}>{`adduser nodeadmin`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/343b27640fcb0d816ab53d5c16e1867d/e9beb/Node-RED_x01.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"36.95652173913043%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABLUlEQVQY01XQSW+CQBTAcXsDBuNS4oKxF9K6VDRhhlaUmbGMgIiIbFrbg9//WzTj0trkf3iX33vJK82OJz0u+mE23h1Qfuyy8DlI1MWq8u5Upk59tqxZDCAq3RIhkSARDfthAEvD9FNbJ6Nt3g9TPS6Gm2wYFYNN9sTCx/mySXzF9jiGVERERERCHAsXjIrv/iadJIfxbj/a5k3qld+whGzBIIKBBQPzU4jejpNLV2wdT6/bfBQXvTDVokx1A80PemGk+XGLePXZEiAKTI7BTf5hxfY6znq8O0ySfXuxqlqOYnNTnTJl7tYsJkHOfvuHZZN2PtYw/9LjfQN70t16ERIRYmBS+dz9iuvDXoKk60aqG7WZqy5YA3st6tcsByBSNnkywrJJJGiD8yDf4R9zzVD1ZWbLBAAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/343b27640fcb0d816ab53d5c16e1867d/e4706/Node-RED_x01.avif 230w\", \"/en/static/343b27640fcb0d816ab53d5c16e1867d/d1af7/Node-RED_x01.avif 460w\", \"/en/static/343b27640fcb0d816ab53d5c16e1867d/b6582/Node-RED_x01.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/343b27640fcb0d816ab53d5c16e1867d/a0b58/Node-RED_x01.webp 230w\", \"/en/static/343b27640fcb0d816ab53d5c16e1867d/bc10c/Node-RED_x01.webp 460w\", \"/en/static/343b27640fcb0d816ab53d5c16e1867d/87ca7/Node-RED_x01.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/343b27640fcb0d816ab53d5c16e1867d/81c8e/Node-RED_x01.png 230w\", \"/en/static/343b27640fcb0d816ab53d5c16e1867d/08a84/Node-RED_x01.png 460w\", \"/en/static/343b27640fcb0d816ab53d5c16e1867d/e9beb/Node-RED_x01.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/343b27640fcb0d816ab53d5c16e1867d/e9beb/Node-RED_x01.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`And make sure that the user is allowed to use the `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`sudo`}</code>{` command and switch users:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`apt-get`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`install`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{`\naddgroup nodeadmin `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{`\n`}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`su`}</span>{` - nodeadmin`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/12141fe3fa5467e2ecd5be099f45720f/e9beb/Node-RED_x02.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"37.826086956521735%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABfklEQVQY0yWN246bMBQA+ZRucWx8jm0ChhA72DiYa0j2lrbKSu1b+/+/UG0rjUbzNsltm9bLsJ7dn6793lQPU38r1EUCpU/AUuREcIKcQJYCEAQCsENBi0IIkSXrEm/bNC/9ug7WVoe6aKpcKl5riUCUZFIyzgkiFYIhMvw0LQoUgiVjdMd6f2xKa2tjKvuJDsGEYGotq0rZ9qC1pOwrBypkBkjJ7gsHknGShLMbopvn6L0J4XTbpjG6YWjPwQTfBG9c2/jOus6qHPI9SsVZlqp/kUzzsK7DPPe+M8sS7++35+u0TKE/25PR1lTGaO/NvERdqaKUMgcUTNdFvsfk7f48L/Hcu/qwH8euj34YfAi2751rm2NT1FoemtIHW2rJspTSJ8pSEIyyNHl53ea5t+3BulPb2eZUyz2InGsty5wjEsTd/yeHHeAOkAJSqYAjTR6P+8v79cfb7Wccf12W36/bxxA+Ynf1JleM81RIVpSy1AoFA6QomFRc5sCB/gXrOGVdhQhNKQAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/12141fe3fa5467e2ecd5be099f45720f/e4706/Node-RED_x02.avif 230w\", \"/en/static/12141fe3fa5467e2ecd5be099f45720f/d1af7/Node-RED_x02.avif 460w\", \"/en/static/12141fe3fa5467e2ecd5be099f45720f/b6582/Node-RED_x02.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/12141fe3fa5467e2ecd5be099f45720f/a0b58/Node-RED_x02.webp 230w\", \"/en/static/12141fe3fa5467e2ecd5be099f45720f/bc10c/Node-RED_x02.webp 460w\", \"/en/static/12141fe3fa5467e2ecd5be099f45720f/87ca7/Node-RED_x02.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/12141fe3fa5467e2ecd5be099f45720f/81c8e/Node-RED_x02.png 230w\", \"/en/static/12141fe3fa5467e2ecd5be099f45720f/08a84/Node-RED_x02.png 460w\", \"/en/static/12141fe3fa5467e2ecd5be099f45720f/e9beb/Node-RED_x02.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/12141fe3fa5467e2ecd5be099f45720f/e9beb/Node-RED_x02.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <h2 {...{\n      \"id\": \"installing-node-red\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h2\" {...{\n        \"href\": \"#installing-node-red\",\n        \"aria-label\": \"installing node red permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Installing Node-RED`}</h2>\n    <p>{`We first need to install the `}<a parentName=\"p\" {...{\n        \"href\": \"https://nodejs.org/\"\n      }}>{`Node.js`}</a>{` runtime and will use the Node Packet Manager (npm) to install `}<a parentName=\"p\" {...{\n        \"href\": \"https://nodered.org\"\n      }}>{`Node-RED`}</a>{` in the second step:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`curl`}</span>{` -sL https://deb.nodesource.com/setup_11.x `}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`|`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`bash`}</span>{` -\n`}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`apt-get`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`install`}</span>{` -y nodejs`}</code></pre></div>\n    <p>{`Type in the install command and use your `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`nodeadmin`}</code>{` password to be allowed to execute it with `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`sudo`}</code>{`:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/ff1c8e0f086888254061b8fb7898d58c/e9beb/Node-RED_x03.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"32.173913043478265%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAIAAABM9SnKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABHklEQVQY0yWO7W6CMBRAeRSz0gL3FloKtKUfAgqYqTPOaeb7P8miS87fc3KSZd15b2LsXTCnafsY4i24e3SPIXx7+5ziwele17arOTJAijyrRCEkArIkDr11wnllezkOOsQ2hCZ4ZbUyWlnTRqdtK1vJBWZv/5UQEhBZImUax7SPpB9SF1IXiTakaYgQRMoPURHICOYvoEg5UACKnMkakbPk15tb0D9Bn9r6y9Q3304iK+CjFGlZpWVFhSgQKQLlyPAN50z+bz8vx8s83o/Ldd19jnHQKhrVtVXXiUbxRpVdJ8syB6CArKwK5FlKNwAsL2hyvp4Px2VZp/mwW2a/zm6awn7y896PW7MNZthaH4yQmOUEkBVACd3kQLOc/AHRkUjXHtBAuAAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/ff1c8e0f086888254061b8fb7898d58c/e4706/Node-RED_x03.avif 230w\", \"/en/static/ff1c8e0f086888254061b8fb7898d58c/d1af7/Node-RED_x03.avif 460w\", \"/en/static/ff1c8e0f086888254061b8fb7898d58c/b6582/Node-RED_x03.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/ff1c8e0f086888254061b8fb7898d58c/a0b58/Node-RED_x03.webp 230w\", \"/en/static/ff1c8e0f086888254061b8fb7898d58c/bc10c/Node-RED_x03.webp 460w\", \"/en/static/ff1c8e0f086888254061b8fb7898d58c/87ca7/Node-RED_x03.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/ff1c8e0f086888254061b8fb7898d58c/81c8e/Node-RED_x03.png 230w\", \"/en/static/ff1c8e0f086888254061b8fb7898d58c/08a84/Node-RED_x03.png 460w\", \"/en/static/ff1c8e0f086888254061b8fb7898d58c/e9beb/Node-RED_x03.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/ff1c8e0f086888254061b8fb7898d58c/e9beb/Node-RED_x03.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p><em parentName=\"p\">{`(in case of the screenshot above, Node.js was already installed from a setup)`}</em></p>\n    <p>{`Now, with the Node runtime installed, we can install Node-RED using the Node Package Manager `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`npm`}</code>{`:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`npm`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`install`}</span>{` -g --unsafe-perm node-red`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/e9beb/Node-RED_x04.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"25.217391304347824%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABBElEQVQY0wXByUrEMAAA0H6K0mWmKbXLZN8mSZMmUztVBA+DKONB8CQIXsSf973sYZuur0v0yftwceYr+s/grpJd4PDGyYfTV8XfFX+h2JCRMQhhh3CvFRkPbfa0kd/vRaJkRJxTmNfZR4s45EdGJcYcaSu1lZgjggeEekJGIbG1outB9vxI/37OCs+Kmskd75dwitY7eYr2lNzs9XZOy+InJ4e+aZoKNFVdF227r0GZOSON5ubIhSAI9UKg4PW6hnUNKZrJipic1owyCNHQ9QA0VV7c1KDc10WmjTJWCom1ZhgPUpIU7exVDJriDsMWHlrOoVB0hN1dB3b7vKhua1BWu/wftqNGvq2IAq4AAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/9007b7aea4eda24ef78e9d346877e8d6/e4706/Node-RED_x04.avif 230w\", \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/d1af7/Node-RED_x04.avif 460w\", \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/b6582/Node-RED_x04.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/9007b7aea4eda24ef78e9d346877e8d6/a0b58/Node-RED_x04.webp 230w\", \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/bc10c/Node-RED_x04.webp 460w\", \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/87ca7/Node-RED_x04.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/9007b7aea4eda24ef78e9d346877e8d6/81c8e/Node-RED_x04.png 230w\", \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/08a84/Node-RED_x04.png 460w\", \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/e9beb/Node-RED_x04.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/9007b7aea4eda24ef78e9d346877e8d6/e9beb/Node-RED_x04.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <h3 {...{\n      \"id\": \"run-node-red-as-a-service\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#run-node-red-as-a-service\",\n        \"aria-label\": \"run node red as a service permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Run Node-RED as a Service`}</h3>\n    <p><a parentName=\"p\" {...{\n        \"href\": \"https://pm2.io/doc/runtime/guide/process-management/\"\n      }}>{`PM2`}</a>{` is a process manager for Node.js. It makes it easy to run applications on boot and ensure they are restarted if necessary. Just like Node-RED, we can install PM2 from npm:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`npm`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`install`}</span>{` -g pm2\npm2 start /usr/bin/node-red`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/ad541a849942d0cdbbbb6d41751360d4/e9beb/Node-RED_x05.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"26.956521739130434%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABA0lEQVQY0x3PV27DIAAAUB+lH3ZkMOAwA9jgQbzi0URdUpUONT+9/wmq5gbvRfM6jdMwjG0b/GPffM7D9zLettPX1P1sp6l1pRaKYU4RSGMAYpglCKeYAACTaJ7bl+d+OB67tg5NOfXNeRm3ZXg6L9vcX9bxsk5TV1eFlBRxRvYU7SlSiu5pFp3X8vfWUaysNcfgq/IQatt40wVfaO6trJ32hfKF0kqUVjqnjRFVbY0VkXeqcopRwhimDOMcCEEEJ4wjxpA6UK2ZFLkQOcr+tSSHGKecY4TTaD51oXWhKayVnaSvir0ZefX2vTx8OHMtOCEphMl9u8MEwGwXJw8Q7lIQ/wHaF0QEYXzOZAAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/ad541a849942d0cdbbbb6d41751360d4/e4706/Node-RED_x05.avif 230w\", \"/en/static/ad541a849942d0cdbbbb6d41751360d4/d1af7/Node-RED_x05.avif 460w\", \"/en/static/ad541a849942d0cdbbbb6d41751360d4/b6582/Node-RED_x05.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/ad541a849942d0cdbbbb6d41751360d4/a0b58/Node-RED_x05.webp 230w\", \"/en/static/ad541a849942d0cdbbbb6d41751360d4/bc10c/Node-RED_x05.webp 460w\", \"/en/static/ad541a849942d0cdbbbb6d41751360d4/87ca7/Node-RED_x05.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/ad541a849942d0cdbbbb6d41751360d4/81c8e/Node-RED_x05.png 230w\", \"/en/static/ad541a849942d0cdbbbb6d41751360d4/08a84/Node-RED_x05.png 460w\", \"/en/static/ad541a849942d0cdbbbb6d41751360d4/e9beb/Node-RED_x05.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/ad541a849942d0cdbbbb6d41751360d4/e9beb/Node-RED_x05.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span>{`\n`}<span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/83592317b0ad6d6b35af83f208d47cb7/e9beb/Node-RED_x06.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"32.608695652173914%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVQY0z2QS27jMBBEdZDZGOOQVHeTzY/4Eyk7sezEk3gc5P6XCeQAAWpRm3pVqGE9p/eP68ft9f/93+fX7f75frtfn1+Wh/p6Pq6X57ZkgCdAQSSRJGmljdJmHI6ndL6c5l7mpfRDbb2UGnONfSlzS7Xl1jPCk1J/SSv6SW7hkUgOU/YxBx845pDnWFuqD1DtuR/bFK11ZLQKk3XeuGBCtIbBMPiJh5BcKpNlBBRACvXIlpwj63RMzpiR9FZivbZeu2D8xMaiYXCBB++NdxQYrcXd7s/bdb2+nYwekfbOC9ZKih2g1A+KD4YtlRqZIeYwMMrA4HkE2Au1B5LeogZhUEwWLUkihdsitU3Y9OvVcDyUy9rPL/NhSZcGzGrOthVXM/fiWrEpGmYA3H4GkoASUCDJEcU37nxSTWXJP6AAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/83592317b0ad6d6b35af83f208d47cb7/e4706/Node-RED_x06.avif 230w\", \"/en/static/83592317b0ad6d6b35af83f208d47cb7/d1af7/Node-RED_x06.avif 460w\", \"/en/static/83592317b0ad6d6b35af83f208d47cb7/b6582/Node-RED_x06.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/83592317b0ad6d6b35af83f208d47cb7/a0b58/Node-RED_x06.webp 230w\", \"/en/static/83592317b0ad6d6b35af83f208d47cb7/bc10c/Node-RED_x06.webp 460w\", \"/en/static/83592317b0ad6d6b35af83f208d47cb7/87ca7/Node-RED_x06.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/83592317b0ad6d6b35af83f208d47cb7/81c8e/Node-RED_x06.png 230w\", \"/en/static/83592317b0ad6d6b35af83f208d47cb7/08a84/Node-RED_x06.png 460w\", \"/en/static/83592317b0ad6d6b35af83f208d47cb7/e9beb/Node-RED_x06.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/83592317b0ad6d6b35af83f208d47cb7/e9beb/Node-RED_x06.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`The second command takes the Node-RED process and runs it inside the Node.js runtime. PM2 is able to generate and configure a start-up script suitable for the platform it is being run on. Run these commands and follow the instructions it provides:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"780px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/a80259c4f16cf9806121a9a86fda544f/a1792/Node-RED_x07.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"93.47826086956522%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAIAAAAf7rriAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADRElEQVQ4y02RyW7kNhiE9SQe293utkSKO0VRC7WwtS+tXm0nAYLMIZec8v6XQLYRDFAgfoL4WFWks7zVy3louzLOwo8q+7c53I2mAWYSUeFTgQj3IXrd7Z/27hYx4FMPMUg4Ihw57SL6rjj2ZVuZP/rq76n759jXqdKxiDRPEhmGFKG95272u0cf7QmDjPmCIcKg8+eUfHSHn6N9y9jN6LuJ3/L4atPfOnu15mrNvcrvdXbJ40rgY6bnOLzkyWKiKRTOz/N066q/LuMxC+pI9kaPeXJpsiFb5zZVTRwMua60qCN5PJipTOcyHYu0T0KnW7LUyChVRBCAXEQBonCzewLoFTEAiQuI61PvFbzsvK/OABLPp9BnvnM6jXkacIEJ9gLuMY5cd7t9eXS9F8p9QgGmHmEAgJ0Hd+v7MUgYXI84coapLmxSlGlbJTahpRFCYIjc3f7Zxy7hEJEV9sAOwP0XjD9FuO/0Q1U3hVKEwifsPSHv0Xt93GwfN9sfLnihHK7OHHpgB/09W3/uF/hynW9vy9QXRUJ973mzfdhsHp63P543D7v9M2EQERcz8Optgb+j3F9JvpJUYOf2vlxvx2XpuiqVEhEKCYWYAEyACIiOZZRIHUvK/CCksVGB5ujbGTnHZRjGZp6bYbRdb9uu6oe6tEZpIRVTmgeKBSHjAktFVcilYlwSLjGXxDmd53Fq+6Gaj83pNJwv86eOx6Ufx6btDlEcyICuVygWBOxrUJ+rc70t09xaa0qb1U1pD1lRpkWZlmWapKFSq/P/8Ncg1ffWGcamaWxWmDjRRZFordaEARGSComDYI36pW/zX+S8v1+X66htzqMwzcKkIElOTRaxAECykZJwQRhHQhJEwIu7Bb77FUEG1JnueljyaigOfTYu1XAyzWTa7mAKnR+S0po002EkTR7HqVKaU464wJhAwnzn9ntzvcxv9/Plcrzfzx8f9/P5eLuf5rk7naZxag910TRl05alNTpRUSyN0daaqs6d6WSrtiwbm1d509d1Z02RlIdcKOZjIAPKBPYJYIIQCvf7jY9cGVDKERPEmS+Vba1KNNcyNJGIpErCKE+kFpjAz8IYEfBZG1Pmc465IJhCwtB/mVYAIWXv/I0AAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/a80259c4f16cf9806121a9a86fda544f/e4706/Node-RED_x07.avif 230w\", \"/en/static/a80259c4f16cf9806121a9a86fda544f/d1af7/Node-RED_x07.avif 460w\", \"/en/static/a80259c4f16cf9806121a9a86fda544f/ea7a6/Node-RED_x07.avif 780w\"],\n              \"sizes\": \"(max-width: 780px) 100vw, 780px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/a80259c4f16cf9806121a9a86fda544f/a0b58/Node-RED_x07.webp 230w\", \"/en/static/a80259c4f16cf9806121a9a86fda544f/bc10c/Node-RED_x07.webp 460w\", \"/en/static/a80259c4f16cf9806121a9a86fda544f/8369b/Node-RED_x07.webp 780w\"],\n              \"sizes\": \"(max-width: 780px) 100vw, 780px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/a80259c4f16cf9806121a9a86fda544f/81c8e/Node-RED_x07.png 230w\", \"/en/static/a80259c4f16cf9806121a9a86fda544f/08a84/Node-RED_x07.png 460w\", \"/en/static/a80259c4f16cf9806121a9a86fda544f/a1792/Node-RED_x07.png 780w\"],\n              \"sizes\": \"(max-width: 780px) 100vw, 780px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/a80259c4f16cf9806121a9a86fda544f/a1792/Node-RED_x07.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}>{`pm2 save\npm2 startup\n`}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`env`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}><span parentName=\"span\" {...{\n              \"className\": \"token environment constant\"\n            }}>{`PATH`}</span></span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span><span parentName=\"code\" {...{\n            \"className\": \"token environment constant\"\n          }}>{`$PATH`}</span>{`:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u nodeadmin --hp /home/nodeadmin`}</code></pre></div>\n    <p>{`The default port for the Node-RED admin panel is `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`1880`}</code>{` - let's make sure that FirewallD allows this traffic:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` firewall-cmd --permanent --zone`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`public --add-port`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span><span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`1880`}</span>{`/tcp`}</code></pre></div>\n    <h3 {...{\n      \"id\": \"create-the-ssl-certificate\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#create-the-ssl-certificate\",\n        \"aria-label\": \"create the ssl certificate permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Create the SSL Certificate`}</h3>\n    <p>{`We can create a self-signed key and certificate pair with OpenSSL in a single command:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` openssl req -x509 -nodes -days `}<span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`365`}</span>{` -newkey rsa:2048 -keyout /home/nodeadmin/.node-red/certs/node-red-selfsigned.key -out /home/nodeadmin/.node-red/certs/node-red-selfsigned.crt`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/e9beb/Node-RED_x08.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"46.95652173913043%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABnUlEQVQozzWQ2YrUQABF8zGmk9ReqUrtW1LZuscZUJxG50VQ8dXf8LNlGoT7ejic2/x+On7eth+3422rb9vy/bp9nfPn6O8l3uf4mv09+y/R3rP7VtNrci9qfJZsl/QXRU1ZwpxtSMY4paw0VkrJpBKEIS4IF3hSnHLIONRm5COCqBtAC0F76T80IZpsRu8mbaWcGOdI69F5G5Mrc4jJpGxD0DlbY0dMekx6hDoAWoy65jxrTqauuW6lzGGeg9ZiUsJ57YIK0TivjJUhaGslZQDAFsALhB3GXfP8fO77fBzLtubbsez7vG5lO+p5rudtj9mmZOVEpaSEAsrgAB7wQ97k7GI0SvFJce+mFIz306S4lFxpgSkgDBIyUDxAeBlAi3D/LgftANrm+nSUOWz7vGylFH99+J2blJEpe+sV50ho0Sk2kJ7gnlDwv/zSvLzcjrPuZy1LXGv8dNazpqWmkFx8zGX3MZi/GBfco/fbMWWQMoDJ0OzXdd1KLt54vc/6iGJkEKGOUMg4UUaMRqSR/Om7yCAeMReEccz5e8s/fXJ2nTK3CdQAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/e4706/Node-RED_x08.avif 230w\", \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/d1af7/Node-RED_x08.avif 460w\", \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/b6582/Node-RED_x08.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/a0b58/Node-RED_x08.webp 230w\", \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/bc10c/Node-RED_x08.webp 460w\", \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/87ca7/Node-RED_x08.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/81c8e/Node-RED_x08.png 230w\", \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/08a84/Node-RED_x08.png 460w\", \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/e9beb/Node-RED_x08.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/17534d22fb1bad8e2e5f7f26299c6b80/e9beb/Node-RED_x08.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p><strong parentName=\"p\">{`Note`}</strong>{` that the server name is set to the local IP address of our Debian server (you have to change it according to your setup). If you want to access your Node-RED installation over a domain, you have to use this one here instead.`}</p>\n    <p>{`These options will create both a key file and a certificate. We will be asked a few questions about our server in order to embed the information correctly in the certificate. Those certificates will be used in the next step to set up the access over HTTPS to the Node-RED Admin-Panel.`}</p>\n    <h3 {...{\n      \"id\": \"configuring-node-red\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#configuring-node-red\",\n        \"aria-label\": \"configuring node red permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Configuring Node-RED`}</h3>\n    <p>{`You will be able to find the Node-RED configuration file under `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/home/nodeadmin/.node-red/`}</code>{`. Let's open the file to add some additional configuration:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`nano`}</span>{` /home/nodeadmin/.node-red/settings.js`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/e9beb/Node-RED_x09.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"33.47826086956522%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABkElEQVQY0xXPz4rTQBzA8TxIETZp0vn3m8lMJpMmbbpbVxZ8Di/aFTa1telms7X6Dt4UwQfx4lGoYo32IK4XqbJIpbp4cankAb7w+Vrv377+/ObV1+Xq2fOnw2xwPjs9L/P5bHo2fTAe3R9md4/v3cmywWicnZwcT/Lh7FExnxdPZqdlmVvflst19en35nI4GtjEk7FBgmJBMRDiUx4KJhkVBBSninu4ubfXsO2GYzeazg3rx+V6s93urv8VZ1MkWdLv6cToOFRxGCQm6rZVKHzJfMV8LYAjyjzgSPiUc2Qt3y3W6++73XVR5k1AYbcdJCYw0g8laGk6RkpKmEuh5WvBBGm1HEo9Bh7BjrWoPqw+Vn9+bfJiwtomvX1kDvfDNDm41Y+SSPc66WEvTuP2QTe6WaMAECEuQg7GjrV6+WJVVdvNz4f52CGuToyKlK+FjhQAZpwGCoKAKc1FwKWiCjxOXYwdTJvWYv74y8XF36uropwQxTv9tH+0H0aSAELEk/UtcFWX9bOE2sxchGxC3f/uHowefbz4BgAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/e4706/Node-RED_x09.avif 230w\", \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/d1af7/Node-RED_x09.avif 460w\", \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/b6582/Node-RED_x09.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/a0b58/Node-RED_x09.webp 230w\", \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/bc10c/Node-RED_x09.webp 460w\", \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/87ca7/Node-RED_x09.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/81c8e/Node-RED_x09.png 230w\", \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/08a84/Node-RED_x09.png 460w\", \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/e9beb/Node-RED_x09.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/5d4ac8bf4c8366b90fb59e1a0b1a4791/e9beb/Node-RED_x09.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`With all the comments removed the file should boil down to the following:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"js\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-js\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-js\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token keyword\"\n          }}>{`var`}</span>{` fs `}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`require`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`(`}</span><span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"fs\"`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`)`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`;`}</span>{`\nmodule`}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`.`}</span>{`exports `}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n    uiPort`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` process`}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`.`}</span>{`env`}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`.`}</span><span parentName=\"code\" {...{\n            \"className\": \"token constant\"\n          }}>{`PORT`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`||`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`1880`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    mqttReconnectTime`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`15000`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    serialReconnectTime`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`15000`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    debugMaxLength`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`1000`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    httpAdminRoot`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`'/admin'`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    httpStatic`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`'/home/nodeadmin/.node-red/static/'`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    ui`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{` path`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"reddash\"`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    adminAuth`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n        type`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"credentials\"`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n        users`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`[`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n            username`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"admin\"`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n            password`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"$2a$08$k.syiLYKsLGJdy01hPolj.m7dfgZXWz0do4oKkesLrJExoYgFBZYu\"`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n            permissions`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"*\"`}</span>{`\n        `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`]`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n        `}<span parentName=\"code\" {...{\n            \"className\": \"token keyword\"\n          }}>{`default`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n            permissions`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"read\"`}</span>{`\n        `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span>{`\n    `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    https`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n        key`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` fs`}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`.`}</span><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`readFileSync`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`(`}</span><span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`'/home/nodeadmin/.node-red/certs/node-red-selfsigned.key'`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`)`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n        cert`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` fs`}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`.`}</span><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`readFileSync`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`(`}</span><span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`'/home/nodeadmin/.node-red/certs/node-red-selfsigned.crt'`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`)`}</span>{`\n    `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    requireHttps`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token boolean\"\n          }}>{`true`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    functionGlobalContext`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    logging`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n        console`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n            level`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"info\"`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n            metrics`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token boolean\"\n          }}>{`false`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n            audit`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token boolean\"\n          }}>{`false`}</span>{`\n        `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span>{`\n    `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n    editorTheme`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n        projects`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`{`}</span>{`\n            enabled`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`:`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token boolean\"\n          }}>{`false`}</span>{`\n        `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span>{`\n    `}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span><span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`,`}</span>{`\n`}<span parentName=\"code\" {...{\n            \"className\": \"token punctuation\"\n          }}>{`}`}</span></code></pre></div>\n    <p>{`Noteable changes:`}</p>\n    <ul>\n      <li parentName=\"ul\">{`Uncommented the import of `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`fs`}</code>{` (needed to add the SSL certificate)`}</li>\n      <li parentName=\"ul\">{`httpAdminRoot is set to `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`/admin`}</code>{` - that means that Node-RED admin panel is available under `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`https://<IP Address>:1880/admin/`}</code>{` instead of  `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`https://<IP Address>:1880/`}</code></li>\n      <li parentName=\"ul\">{`We created a folder `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`/home/nodeadmin/.node-red/static/`}</code>{` to host static content for the Node-RED flow - `}<a parentName=\"li\" {...{\n          \"href\": \"/en/Advanced_User/openHABian_on_Raspberry_Pi/Projects/FTP_Snapshot/\"\n        }}>{`we already explored a use case`}</a>{` where let our IP camera upload a snapshot to the static directory and displayed the image on our Node-RED Dashboard.`}</li>\n      <li parentName=\"ul\">{`The `}<a parentName=\"li\" {...{\n          \"href\": \"https://flows.nodered.org/node/node-red-dashboard\"\n        }}>{`node-red-dashboard`}</a>{` is an optional plugin for Node-RED that allows us to create - well, a dashboard... The line `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`ui: { path: \"reddash\" }`}</code>{` sets the URL for this dashboard to  `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`https://<IP Address>:1880/reddash/`}</code>{`.`}</li>\n      <li parentName=\"ul\">{`For the `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`adminAuth`}</code>{` we `}<a parentName=\"li\" {...{\n          \"href\": \"/en/Advanced_User/Node-RED_and_MQTT/#creating-an-adminstrator-login\"\n        }}>{`created an Admin Login`}</a>{` (follow the link to learn how to generate the password hash) and set the default permission to `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`read`}</code>{` - which means that everyone can open the dashboard and see our Node-RED flows - but only the admin has the right to change them (you can remove the default permission, if not necessary).`}</li>\n      <li parentName=\"ul\">{`For `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`https`}</code>{` we linked in the certificate we created in the step before. Don't forget to set `}<code parentName=\"li\" {...{\n          \"className\": \"language-text\"\n        }}>{`requireHttps: true`}</code>{` to enforce an encrypted connection.`}</li>\n    </ul>\n    <h3 {...{\n      \"id\": \"the-node-red-admin-panel\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#the-node-red-admin-panel\",\n        \"aria-label\": \"the node red admin panel permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`The Node-RED Admin Panel`}</h3>\n    <p>{`If you followed the recommendations above, you are now able to access Node-RED over `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`https://<IP Address>:1880/admin/`}</code>{` - in my case this is `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`https://192.168.2.111:1880/admin/`}</code>{`. Click on the user icon in the top left, login with the admin login you generated in the previous step and click on menu icon (on the right of the user login) and open the `}<strong parentName=\"p\">{`Manage Palette`}</strong>{` menu:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/fb0449977bb517b1f2194beaba66e865/e9beb/Node-RED_x10.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"46.52173913043478%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABmklEQVQoz3XOy0vCcADA8Z2DqG2ab8lKqpM9b12y1yGQwOXmuYPdokMhQUj2b3QLLMHnKqLylBX0IHu3KEtphBWSNGvOfr/9Ik9F7HP/whdrbW7u6uhkRl20w0H32il7n6t/wDU4RDkpJzVK0wzDuGnGzTBuiqanxjwLE17PsLO9rbOnuxtbi8f293YSia1YPB5j2Y3NzZXV1aXl5VAoFI1Gg8FgIBAIh8Msy0aiEbdjpKmqVltVXVNbQ+A49sDnMs9vheJnWZKQMlEUIYSzPh9RV6fWatRqtUqlws6Se8lA6Ob4pPD+DgCQJKn8lyRJAIB8Pv+Sy814vXqd3qDXkyT5E1+nU0dc4oG/EYQiQggAAP+RZVkQhEKpNDk9rdVoLJZ6kiQIgsBuufur1C2ffSp+KMYQwhL4gqfnc+Pj5gaLyWjUVGCZu9Td5fprLl3+AjJUAEAJIbi45HeM1Le0WBsbTSaT2WzGOG7/4DDM8xxQbmVZFkURITTr8+E4bjQY8Ars7PQiub2bzT4qDf+O5/1+q7XJZrPpKr4BtCxxMY5VM5MAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/fb0449977bb517b1f2194beaba66e865/e4706/Node-RED_x10.avif 230w\", \"/en/static/fb0449977bb517b1f2194beaba66e865/d1af7/Node-RED_x10.avif 460w\", \"/en/static/fb0449977bb517b1f2194beaba66e865/b6582/Node-RED_x10.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/fb0449977bb517b1f2194beaba66e865/a0b58/Node-RED_x10.webp 230w\", \"/en/static/fb0449977bb517b1f2194beaba66e865/bc10c/Node-RED_x10.webp 460w\", \"/en/static/fb0449977bb517b1f2194beaba66e865/87ca7/Node-RED_x10.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/fb0449977bb517b1f2194beaba66e865/81c8e/Node-RED_x10.png 230w\", \"/en/static/fb0449977bb517b1f2194beaba66e865/08a84/Node-RED_x10.png 460w\", \"/en/static/fb0449977bb517b1f2194beaba66e865/e9beb/Node-RED_x10.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/fb0449977bb517b1f2194beaba66e865/e9beb/Node-RED_x10.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`In the following tutorials we are going to use a couple of functions that don't come with Node-RED directly. But we can install them from the `}<a parentName=\"p\" {...{\n        \"href\": \"https://flows.nodered.org\"\n      }}>{`Node-RED Flow Library`}</a>{` - feel free to browse it and see if there is something that you can use.`}</p>\n    <p>{`You can install those from the palette menu - I already did that and highlighted them in my list of installed nodes:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/e9beb/Node-RED_x11.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"106.08695652173911%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACLUlEQVQ4y4WT2VbbMBCG84Z9iL5hgULYS2lpy13DHRjHiR0vRIu1yxpZPbFJMKnP4bu1f83om9Ekeo5mDw+z2ayqKowxQghvQaNgvC7Lcr4o82JCtlBKGWN0QF0zxlg9hFLlIT6/mX76nPz4MynyHGFMCFmv19FTJKV0zllrnXNlWSzTJSGkb4QQ0jQNeDBc8KzghE7SdJllK4RQXddCCGNs2GKtNcbYAX5L/3VSdrCOl6rEGAEAOAfg2rYNIbQDduHW+6qqJnmeZ6tVCAEAKoyF1uEjAEApNZ/PJ52YjRmlVZ0sWLKQ2YovM53lrfftGACgtU6S5DW8yXO2ODgqvhzSi0t8csqvb0LX9h79id77tzClVGutAFwn4/W/MYSUrOv0fWXG0uOT4vBrOT3LDo7U34ddnSH9ufuVlVI4TW1ZBcYCocGYUVtaaymFEGJQmVIhJY2iOopYHNPnmD0+gZA+BA/gB/QDN8ZubGOM+zCTcnl5ha6/ift7eveL3/5sGeuvvu+sbZ1zcRy/hnthjZQgRNA6aDOuqzuoaRouxCa8E1ZznhyfFGcX5ffb6uIK1qgdE9bn/xOmdV0UFuEgZVBqdMg9zjnO+btRcc6ZEFwIxjlhzFo7XObhk2i7/Nt69uG0yGspG++lteBgtOxGtdZam/0Na/LCLZaQpr566S48IswYozoGbTNWU5pMp9n0tDg7r+9+jw5ph/f+re1+wwjn2toPn6RzTkqJEPoHq9qtOvKFloAAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/e4706/Node-RED_x11.avif 230w\", \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/d1af7/Node-RED_x11.avif 460w\", \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/b6582/Node-RED_x11.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/a0b58/Node-RED_x11.webp 230w\", \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/bc10c/Node-RED_x11.webp 460w\", \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/87ca7/Node-RED_x11.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/81c8e/Node-RED_x11.png 230w\", \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/08a84/Node-RED_x11.png 460w\", \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/e9beb/Node-RED_x11.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/d2fcbfc9ef1a6573e3ea45538928aec0/e9beb/Node-RED_x11.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Switch to the `}<strong parentName=\"p\">{`Install Tab`}</strong>{` and search for those entries and click the install button:`}</p>\n    <ul>\n      <li parentName=\"ul\">{`node-red-contrib-alexa-local`}</li>\n      <li parentName=\"ul\">{`node-red-contrib-bigtimer`}</li>\n      <li parentName=\"ul\">{`node-red-contrib-mjpgcamera`}</li>\n      <li parentName=\"ul\">{`node-red-contrib-string`}</li>\n      <li parentName=\"ul\">{`node-red-dashboard`}</li>\n    </ul>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/e9beb/Node-RED_x12.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"40.43478260869565%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABUElEQVQY02WRTW7bMBBGdcAcosfJItfpIotcIO0ira3GAfxH0xQpicMZDilKlmKqkJuiLfrwMIsPGMwAX3E4HsuyXK3XAM7/B3nvmf/4O4wxHoUoEJGInHNExMz0F54oEJG1HwKgc3Eat5+fHu8+rR6fCqM1AJD3TV0LIcA5AABrEbF9+SaevwwneZHny1n1u/0Y4pRzAuStOO8PRaUqYwwAtNa2RBjCL533bn+wux2rKtzkk6yVQsS6aUJKUp4LrSut9fJ629rVui1/NOuy+b5iKftp6och9f2HwxBCiDEikSUSQhR1bYwx8zxPXYevG9xu4e3NbTbJmDz/Q855zkv2znw5ipNShXMOEbuu64ehcaCMUcacdKXblpczsbuRUlqWr9d5nofnr/39g7S2uHXBiBhjDBzYe/beWhtCmKZpHMdlTgvXGznnLsbELKX8Cf+dvCpUMOTCAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/e4706/Node-RED_x12.avif 230w\", \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/d1af7/Node-RED_x12.avif 460w\", \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/b6582/Node-RED_x12.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/a0b58/Node-RED_x12.webp 230w\", \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/bc10c/Node-RED_x12.webp 460w\", \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/87ca7/Node-RED_x12.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/81c8e/Node-RED_x12.png 230w\", \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/08a84/Node-RED_x12.png 460w\", \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/e9beb/Node-RED_x12.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/41c03c0f6cced86c95ed7b4d8e4a6147/e9beb/Node-RED_x12.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <h2 {...{\n      \"id\": \"installing-mosquitto\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h2\" {...{\n        \"href\": \"#installing-mosquitto\",\n        \"aria-label\": \"installing mosquitto permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Installing Mosquitto`}</h2>\n    <p>{`MQTT is a machine-to-machine messaging protocol, designed to provide lightweight publish/subscribe communication to \"Internet of Things\" devices. It is commonly used for geo-tracking fleets of vehicles, home automation, environmental sensor networks, and utility-scale data collection. Mosquitto is a popular MQTT broker that has great community support and is easy to install and configure.`}</p>\n    <p>{`We are going to use it to exchange states between subflows in Node-RED. MQTT will also come in handy once we start using other home automation systems like `}<a parentName=\"p\" {...{\n        \"href\": \"https://www.openhab.org\"\n      }}>{`OpenHAB`}</a>{`, `}<a parentName=\"p\" {...{\n        \"href\": \"https://www.home-assistant.io\"\n      }}>{`Home Assistant`}</a>{` or `}<a parentName=\"p\" {...{\n        \"href\": \"http://iobroker.net\"\n      }}>{`ioBroker`}</a>{`. We will be able to let those programs control our INSTAR IP cameras using the MQTT protocol.`}</p>\n    <p>{`First, download their repository signing key and install it:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"text\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-text\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-text\"\n        }}>{`wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key\nsudo apt-key add mosquitto-repo.gpg.key`}</code></pre></div>\n    <p>{`Now tell apt-get where to find the software by adding the repository URL to a file in `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/apt/sources.list.d/`}</code>{`:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"text\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-text\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-text\"\n        }}>{`sudo nano /etc/apt/sources.list.d/mosquitto.list`}</code></pre></div>\n    <p>{`This will open up a new, blank file. Paste the following line into the file.`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"text\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-text\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-text\"\n        }}>{`deb http://repo.mosquitto.org/debian stretch main`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"729px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/49c72d0f125a99c926d4ad2d687309b3/b2982/Node-RED_x13.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"7.391304347826087%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAIAAABR8BlyAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAQElEQVQI1wXBiwmAMAwFQKcpSkykDiK14eVX3H8N7zYBSI0R4uvOT6zYipCsYI2eQUAb2F8c007k5UXq7Zk08AMDoBDWtOntZwAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/49c72d0f125a99c926d4ad2d687309b3/e4706/Node-RED_x13.avif 230w\", \"/en/static/49c72d0f125a99c926d4ad2d687309b3/d1af7/Node-RED_x13.avif 460w\", \"/en/static/49c72d0f125a99c926d4ad2d687309b3/e92f3/Node-RED_x13.avif 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/49c72d0f125a99c926d4ad2d687309b3/a0b58/Node-RED_x13.webp 230w\", \"/en/static/49c72d0f125a99c926d4ad2d687309b3/bc10c/Node-RED_x13.webp 460w\", \"/en/static/49c72d0f125a99c926d4ad2d687309b3/78e23/Node-RED_x13.webp 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/49c72d0f125a99c926d4ad2d687309b3/81c8e/Node-RED_x13.png 230w\", \"/en/static/49c72d0f125a99c926d4ad2d687309b3/08a84/Node-RED_x13.png 460w\", \"/en/static/49c72d0f125a99c926d4ad2d687309b3/b2982/Node-RED_x13.png 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/49c72d0f125a99c926d4ad2d687309b3/b2982/Node-RED_x13.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Save and close out of the editor, then update with apt-get to pull in the new package information. Then install the mosquitto package and its client software:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"text\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-text\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-text\"\n        }}>{`sudo apt-get update\nsudo apt-get install mosquitto mosquitto-clients`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"731px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/5416dfb1e2c9868cdae035059f29021e/6e9ba/Node-RED_x14.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"54.78260869565218%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACKElEQVQoz02RaVPaUBSGI1YgUdtKBVmsEBAGjDpqVsx2s94sN6s3IQL6pV/6/39BJ9rpdOb5eN55zjkvwVTvNy+boRfrMPplBTsn/O2GjB2SwOuYftdBAxj1bUTJ9pFofFUcUjBI0WgKgGBVYlW9TRNMZ6VQbpmsZHB1kxYP1X4a47u8Wibl02b/00/6MO5ZYd/wm7x+wKrEJ3S2uYzyEcqXaTGO8SDMBmG+wK+LMJ+ifIzy66QYo3zgxdSz1eI+kk9KDasSy2I3Tctxgu+L7ezldZxtJlm5qvbTCM+ycpIWdFr2/PTcRR0AJzA+12GL1xu1WSFuqzc6yscJlhLMWYHkx5IXMZrzoDqsDnkAGdlaSGAkGUci6CjOF049+GdeVfsrlNFZqQeporuC5rDP5p2grWX7SQSPEriXdH5tXHMKwWmUYNRCViE4leA0Yl7urtKC2eyYYksneOQldJhd2OEI+BfAO1Odtqg3HmWCVQ957UQ0G5zW4LQDTquPn+PtJM6vwmwev7QU+1hzTnX3G4BdA3Z1eLw2Kclo8uDwY5oUACXWVZE8aPN6/bCbvKRdRAfpJYyHDuoAr2cHAxf17eBEdU81t2P433XYerbasvV34VquEqtyO0HZLMpvi9dFhMXt+wLheZgvY3wd5kMY91w09JMz0ycVu7k2CVb7DNdMs7IHowsvHgbpDwd1nWjouR3TpGSXlC1Srm3NtdmWbUpxGvx/SU79A+cUjXzZNT7MAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/5416dfb1e2c9868cdae035059f29021e/e4706/Node-RED_x14.avif 230w\", \"/en/static/5416dfb1e2c9868cdae035059f29021e/d1af7/Node-RED_x14.avif 460w\", \"/en/static/5416dfb1e2c9868cdae035059f29021e/8ebaf/Node-RED_x14.avif 731w\"],\n              \"sizes\": \"(max-width: 731px) 100vw, 731px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/5416dfb1e2c9868cdae035059f29021e/a0b58/Node-RED_x14.webp 230w\", \"/en/static/5416dfb1e2c9868cdae035059f29021e/bc10c/Node-RED_x14.webp 460w\", \"/en/static/5416dfb1e2c9868cdae035059f29021e/feeb6/Node-RED_x14.webp 731w\"],\n              \"sizes\": \"(max-width: 731px) 100vw, 731px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/5416dfb1e2c9868cdae035059f29021e/81c8e/Node-RED_x14.png 230w\", \"/en/static/5416dfb1e2c9868cdae035059f29021e/08a84/Node-RED_x14.png 460w\", \"/en/static/5416dfb1e2c9868cdae035059f29021e/6e9ba/Node-RED_x14.png 731w\"],\n              \"sizes\": \"(max-width: 731px) 100vw, 731px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/5416dfb1e2c9868cdae035059f29021e/6e9ba/Node-RED_x14.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`To test the Mosquitto service log in to your server a second time, so you have two terminals side-by-side. In the new terminal, use mosquitto_sub to subscribe to the test topic:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}>{`mosquitto_sub -h localhost -t `}<span parentName=\"code\" {...{\n            \"className\": \"token builtin class-name\"\n          }}>{`test`}</span></code></pre></div>\n    <p>{`The -h flag specifies the hostname of the MQTT server, and -t is the topic name. You'll see no output after hitting ENTER because mosquitto_sub is waiting for messages to arrive. Switch back to your other terminal and publish a message:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"757px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/0e06124218774f0c25fe30f72df0ca2e/1fbe8/Node-RED_x15.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"9.130434782608695%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAIAAADXZGvcAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAhUlEQVQI1wF6AIX/ALe4urK3uamztbG6u7jCxLXAwrzHyHGDi0JbZExpbkNhaDxcZD9eZjxcZJiorcHKzcHJzMLLzLnCx661vwAoTlIhSk8eSEoaRkEQPkYRQEYMPEQEMDsHLjsDMjwGNz4CMzwGNT0FNT0JOEAFNT0FND0GND0BMDkYQUlWKi7rXh6/1wAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/0e06124218774f0c25fe30f72df0ca2e/e4706/Node-RED_x15.avif 230w\", \"/en/static/0e06124218774f0c25fe30f72df0ca2e/d1af7/Node-RED_x15.avif 460w\", \"/en/static/0e06124218774f0c25fe30f72df0ca2e/4313e/Node-RED_x15.avif 757w\"],\n              \"sizes\": \"(max-width: 757px) 100vw, 757px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/0e06124218774f0c25fe30f72df0ca2e/a0b58/Node-RED_x15.webp 230w\", \"/en/static/0e06124218774f0c25fe30f72df0ca2e/bc10c/Node-RED_x15.webp 460w\", \"/en/static/0e06124218774f0c25fe30f72df0ca2e/4578a/Node-RED_x15.webp 757w\"],\n              \"sizes\": \"(max-width: 757px) 100vw, 757px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/0e06124218774f0c25fe30f72df0ca2e/81c8e/Node-RED_x15.png 230w\", \"/en/static/0e06124218774f0c25fe30f72df0ca2e/08a84/Node-RED_x15.png 460w\", \"/en/static/0e06124218774f0c25fe30f72df0ca2e/1fbe8/Node-RED_x15.png 757w\"],\n              \"sizes\": \"(max-width: 757px) 100vw, 757px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/0e06124218774f0c25fe30f72df0ca2e/1fbe8/Node-RED_x15.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}>{`mosquitto_pub -h localhost -t `}<span parentName=\"code\" {...{\n            \"className\": \"token builtin class-name\"\n          }}>{`test`}</span>{` -m `}<span parentName=\"code\" {...{\n            \"className\": \"token string\"\n          }}>{`\"hello world\"`}</span></code></pre></div>\n    <p>{`The options for mosquitto_pub are the same as mosquitto_sub, though this time we use the additional -m option to specify our message. Hit ENTER, and you should see hello world pop up in the other terminal. You've sent your first MQTT message!`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"760px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/8d463bb00c81043ee0913482c0db9f9b/3c051/Node-RED_x16.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"10%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAIAAADXZGvcAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAgklEQVQI12PYumNXfnW9eVCEXWyiWWi0fmC4hm+IX3r+3DlL+mbOmb5k6cxlK6YuXjp18bIpS1YsWLdx8fpNSzdu7p+z9PCxEwxG0aEsJrYc5vYM+paMJjYgZGzDoG/JoGfFYGDFYGjFoGvOoGPGoGMKIrVNGbRMmXTMGJS0uxYuAQA2ASpDAq0wTQAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/8d463bb00c81043ee0913482c0db9f9b/e4706/Node-RED_x16.avif 230w\", \"/en/static/8d463bb00c81043ee0913482c0db9f9b/d1af7/Node-RED_x16.avif 460w\", \"/en/static/8d463bb00c81043ee0913482c0db9f9b/83f21/Node-RED_x16.avif 760w\"],\n              \"sizes\": \"(max-width: 760px) 100vw, 760px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/8d463bb00c81043ee0913482c0db9f9b/a0b58/Node-RED_x16.webp 230w\", \"/en/static/8d463bb00c81043ee0913482c0db9f9b/bc10c/Node-RED_x16.webp 460w\", \"/en/static/8d463bb00c81043ee0913482c0db9f9b/9046c/Node-RED_x16.webp 760w\"],\n              \"sizes\": \"(max-width: 760px) 100vw, 760px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/8d463bb00c81043ee0913482c0db9f9b/81c8e/Node-RED_x16.png 230w\", \"/en/static/8d463bb00c81043ee0913482c0db9f9b/08a84/Node-RED_x16.png 460w\", \"/en/static/8d463bb00c81043ee0913482c0db9f9b/3c051/Node-RED_x16.png 760w\"],\n              \"sizes\": \"(max-width: 760px) 100vw, 760px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/8d463bb00c81043ee0913482c0db9f9b/3c051/Node-RED_x16.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <h3 {...{\n      \"id\": \"configuring-mosquitto\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#configuring-mosquitto\",\n        \"aria-label\": \"configuring mosquitto permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Configuring Mosquitto`}</h3>\n    <p>{`Mosquitto includes a utility to generate a special password file called mosquitto_passwd. This command will prompt you to enter a password for the specified username (we choose `}<strong parentName=\"p\">{`debian`}</strong>{` in the example), and place the results in `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/mosquitto/passwd`}</code>{`:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}>{`mosquitto_passwd -c /etc/mosquitto/passwd debian`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"729px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/4b8af05aba479e0ab93b7d322ef26481/b2982/Node-RED_x17.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"12.173913043478262%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAIAAADXZGvcAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAbElEQVQI12PQCAxT8wuScPESdfKUcvMVdfIUc/HmtXYRsnYTdfAQcfIUcfQQdfISd/HitXFmMLJmMLRiMLBiMLBk1LNgUPEPkfcOEHf1EXJ0YjO3YDC0AakwsmYwtmYwsgEpNbRGICMktqEVAIQNFTcJta4lAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/4b8af05aba479e0ab93b7d322ef26481/e4706/Node-RED_x17.avif 230w\", \"/en/static/4b8af05aba479e0ab93b7d322ef26481/d1af7/Node-RED_x17.avif 460w\", \"/en/static/4b8af05aba479e0ab93b7d322ef26481/e92f3/Node-RED_x17.avif 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/4b8af05aba479e0ab93b7d322ef26481/a0b58/Node-RED_x17.webp 230w\", \"/en/static/4b8af05aba479e0ab93b7d322ef26481/bc10c/Node-RED_x17.webp 460w\", \"/en/static/4b8af05aba479e0ab93b7d322ef26481/78e23/Node-RED_x17.webp 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/4b8af05aba479e0ab93b7d322ef26481/81c8e/Node-RED_x17.png 230w\", \"/en/static/4b8af05aba479e0ab93b7d322ef26481/08a84/Node-RED_x17.png 460w\", \"/en/static/4b8af05aba479e0ab93b7d322ef26481/b2982/Node-RED_x17.png 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/4b8af05aba479e0ab93b7d322ef26481/b2982/Node-RED_x17.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Now create a new configuration file for Mosquitto and tell it to use this password file to require logins for all connections:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`nano`}</span>{` /etc/mosquitto/conf.d/default.conf`}</code></pre></div>\n    <p>{`This should open an empty file. Paste in the following:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}>{`allow_anonymous `}<span parentName=\"code\" {...{\n            \"className\": \"token boolean\"\n          }}>{`false`}</span>{`\npassword_file /etc/mosquitto/passwd`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"729px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/b2982/Node-RED_x18.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"9.130434782608695%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAIAAADXZGvcAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAeUlEQVQI12MIKy6KqSyPq6lMaaxLbqiNra0MLSuNqCwPLi0OKikKKS0JLSsJLi4KLi4OLS2Jq6lKbqhJrq8JLS4KLMhj4Ld3E3Rw57Jy4rJ2ZrNwYDCyZjGz57Y0YdAwZtAwYVA3ZlA3ArPBDDVDBlVDBlUDEEPNEAA5SSHQIgn7owAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/e4706/Node-RED_x18.avif 230w\", \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/d1af7/Node-RED_x18.avif 460w\", \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/e92f3/Node-RED_x18.avif 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/a0b58/Node-RED_x18.webp 230w\", \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/bc10c/Node-RED_x18.webp 460w\", \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/78e23/Node-RED_x18.webp 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/81c8e/Node-RED_x18.png 230w\", \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/08a84/Node-RED_x18.png 460w\", \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/b2982/Node-RED_x18.png 729w\"],\n              \"sizes\": \"(max-width: 729px) 100vw, 729px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/97ad51e14f83f6ca6d0f6515f02f42d9/b2982/Node-RED_x18.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p><code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`allow_anonymous false`}</code>{` disables all non-authenticated connections, and the `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`password_file`}</code>{` line tells Mosquitto where to look for user and password information. Save and exit the file.`}</p>\n    <p>{`Now you need to restart Mosquitto and test your changes.`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`service`}</span>{` mosquitto reload`}</code></pre></div>\n    <h3 {...{\n      \"id\": \"testing-mosquitto-from-an-external-machine\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#testing-mosquitto-from-an-external-machine\",\n        \"aria-label\": \"testing mosquitto from an external machine permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Testing Mosquitto from an external Machine`}</h3>\n    <p>{`Since your devices that you want to connect will probably contacting your MQTT Server from an external IP address, let's test this and make sure everything is working. First let's now open the MQTT Port in our FirewallD configuration:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"text\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-text\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-text\"\n        }}>{`sudo firewall-cmd --permanent --zone=public --add-port=1883/tcp\nsudo firewall-cmd --reload\nsudo firewall-cmd --list-all`}</code></pre></div>\n    <p><a parentName=\"p\" {...{\n        \"href\": \"/en/Advanced_User/OpenHAB_Home_Automation/Mosquitto_Installation_on_Windows/#testing-the-mqtt-server-with-mqttfx\"\n      }}>{`We used the tool MQTT.fx before`}</a>{` to debug our MQTT Server. Let's install it on another machine (Linux, Windows or macOS) and click on the Cog Wheel icon left to the Connect and Disconnect button to add our newly setup MQTT server:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/e9beb/Node-RED_x19.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"39.130434782608695%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABaElEQVQY03WOzU7CQBhF+xZEjC4MvxbKzDedUu2ARahapYRYSjtMgAYLJWpEauICE9Sdj21AFxrjyd3dnNwr7T1GqXiQuh+lFmFqEe4sJ+kkSifR7tN0/3l+sLrLvz4W3paF92XxPflKbv1QfF3sJ5HEVL2SzaJsHmVyKJOjRVkr5NVcVj8snh/pQduJxSj0fL/dcW27Z1/17MtbMR3a3NCOJSAgl8qy8pUSUmlDJNbNuhWuWpO11rARUoCqCEBBSEGoXFE0egSIVqqaJMty6QcYQKtbtH7BWp2LaxEMhrPZTAjR7/c5591ulxACgIlKsF6VSr/BGKuACcEqVU3T5DyI45jzwHVdz/Mcx7EsizEGGDay/BuE8UnNMLvh2fyjOX4xW+d1ZjSbpw3TPN6i6zqldLNe/SNjjLfHAAhhhnHVdnw+6PuBH3CDMYTQttnwr0wIEIB6jXVc3xPj3mDoiXHNPIXv9lv+BPPNduOUZIUmAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/e4706/Node-RED_x19.avif 230w\", \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/d1af7/Node-RED_x19.avif 460w\", \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/b6582/Node-RED_x19.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/a0b58/Node-RED_x19.webp 230w\", \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/bc10c/Node-RED_x19.webp 460w\", \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/87ca7/Node-RED_x19.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/81c8e/Node-RED_x19.png 230w\", \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/08a84/Node-RED_x19.png 460w\", \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/e9beb/Node-RED_x19.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/0b752165fd5a7bd08d17e3c82b97ce84/e9beb/Node-RED_x19.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Replace the IP address (\"192.168.2.111\") with the address of your Linux machine that runs the MQTT service and add the login that you created for the Mosquitto server. Save the settings and connect to the server - the green light on the right should show that the connection was successfully establish.`}</p>\n    <p>{`Change to the `}<strong parentName=\"p\">{`Subscribe`}</strong>{` tab type in `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`test`}</code>{` and hit `}<strong parentName=\"p\">{`Subscribe`}</strong>{`:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/f929ad12765cdb09c162f6941951c5e7/e9beb/Node-RED_x20.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"26.521739130434778%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA2ElEQVQY04XCwU6DMBgA4D4PNQuUUtpSWvpDNzY1Qw8j0uFNN7J50XXRmy/gO5toYuLB+OVDNDyRt2P8esBhj8P0PQoTPh9wmC7OEw776PT7yy56foxOO1TaS1DGKltJVQlZCWmFMIU1rpvDvGtXIJXKWMnynwVlTuul48hUur69Xxw/YD1Ya1y7BNcIrd9nic2ymDH6x5QxtOl77/0w3A1fxq0fR6/rxQ1ci1wQQtKUEkKyXEjTCJ6LQrnNg73qOedIA5AkqZsGaii1gW5r2zVJ4hmlJP3HJxsZT+DTmwNUAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f929ad12765cdb09c162f6941951c5e7/e4706/Node-RED_x20.avif 230w\", \"/en/static/f929ad12765cdb09c162f6941951c5e7/d1af7/Node-RED_x20.avif 460w\", \"/en/static/f929ad12765cdb09c162f6941951c5e7/b6582/Node-RED_x20.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f929ad12765cdb09c162f6941951c5e7/a0b58/Node-RED_x20.webp 230w\", \"/en/static/f929ad12765cdb09c162f6941951c5e7/bc10c/Node-RED_x20.webp 460w\", \"/en/static/f929ad12765cdb09c162f6941951c5e7/87ca7/Node-RED_x20.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f929ad12765cdb09c162f6941951c5e7/81c8e/Node-RED_x20.png 230w\", \"/en/static/f929ad12765cdb09c162f6941951c5e7/08a84/Node-RED_x20.png 460w\", \"/en/static/f929ad12765cdb09c162f6941951c5e7/e9beb/Node-RED_x20.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/f929ad12765cdb09c162f6941951c5e7/e9beb/Node-RED_x20.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Switch to the `}<strong parentName=\"p\">{`Publish`}</strong>{` tab, type in test - as the topic you want to publish a message under - and add a message as payload in the text field below, e.g. `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`{\"hello\":\"world\"}`}</code>{`. Then hit publish:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/785fbb5007489f451b6c258689eb3efe/e9beb/Node-RED_x21.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"25.217391304347824%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABA0lEQVQY01XGy06DQACFYd7CjbjoVpNmhkspzAx3CCzUWmRjK23spgsvG6MRytQyXDQpGhPf15R2458vJ4c7/ch636veD+XblP/KDtqU374dd3b/v5M2PWqehd+KM6zAJ8TDxNFwBzmqZmPb8iPfCcZh6CJsDBRTUc2htltFNRTVQ2hyF3Hm5EUfL3SCEMEIY8OydEIAwvd9OIUCQNpAliVZFiUBQiCI4h6AIIwvODs4n84Xye2hJEnms1lwOVpGy9i5OgN9SZIECIa6645ubMs0TNPzPKRq4XXMPT0+sGJTVVXTNPW+pi5ZmTXbrKxpnlNKaZ6vN4zVn6zoYgUritf39R939mVl9eMGkwAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/785fbb5007489f451b6c258689eb3efe/e4706/Node-RED_x21.avif 230w\", \"/en/static/785fbb5007489f451b6c258689eb3efe/d1af7/Node-RED_x21.avif 460w\", \"/en/static/785fbb5007489f451b6c258689eb3efe/b6582/Node-RED_x21.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/785fbb5007489f451b6c258689eb3efe/a0b58/Node-RED_x21.webp 230w\", \"/en/static/785fbb5007489f451b6c258689eb3efe/bc10c/Node-RED_x21.webp 460w\", \"/en/static/785fbb5007489f451b6c258689eb3efe/87ca7/Node-RED_x21.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/785fbb5007489f451b6c258689eb3efe/81c8e/Node-RED_x21.png 230w\", \"/en/static/785fbb5007489f451b6c258689eb3efe/08a84/Node-RED_x21.png 460w\", \"/en/static/785fbb5007489f451b6c258689eb3efe/e9beb/Node-RED_x21.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/785fbb5007489f451b6c258689eb3efe/e9beb/Node-RED_x21.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Switch back to the `}<strong parentName=\"p\">{`Subscribe`}</strong>{` tab to verify that MQTT.fx successfully published the message and that our Mosquitto server notified clients with subscriptions to the topic about the change - in this case only our MQTT.fx instance:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/e9beb/Node-RED_x22.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"62.60869565217391%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB2klEQVQoz42RS2/TQBRG54+USIgVdm3Pwx7fmYntxA5x3BKaxCFxaHhsyBKFRUt4LLogD6ekYkH5u2hMJNoCgqOj0dUnzdx7Neh++e7B7lNt96G2XdQuK7eLWnl+r/KgPN+HNy0Xtc3ZwfIMpXG7rSARkKh6ooJE1ZuyHifdVrvfbWf9TtYAEfkQAUS60IYgEhX1egGKWln84n2Uz8IwDMIoTlpBGIKqeyCEVFIp7nMt557neZx7nLuMcs8TiqPJ6fPJ6/no5Ww8Ho+eDovRME07TDaJaBiGaRiGaZqG8dCmLvMlwZhQFnZPRfLYwRSFQdB5FHePj7JO2j7uDV/NPl5clJdXq+1u+YvPy/VmtSnXq9Vqvd5cfdt8+Xp9/R1ZliWkjJpNIQAaqcrGR90n+WAw6PfzW+hoX/RO8kG/KArEGCOEYIwJIcSxiXPo2PahZWnvYO0jq8I0TUQrmIYy5jLmuq7L/oVbgX72pJSSCkqIfub/QEJKzjmlFAB8DWBKtYxV/vUmIQQ1oggAMMZKKSFABdFJELZsJ7Ydfeqv+QOUUinlrbEdxwHffzN5Nh0Xk9FoWhS5Dw6+254Q4vt8/naObqYYY5BymmZ5PRg2moMgTIle4Xdc1wWAHwHyybVyLcCqAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/e4706/Node-RED_x22.avif 230w\", \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/d1af7/Node-RED_x22.avif 460w\", \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/b6582/Node-RED_x22.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/a0b58/Node-RED_x22.webp 230w\", \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/bc10c/Node-RED_x22.webp 460w\", \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/87ca7/Node-RED_x22.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/81c8e/Node-RED_x22.png 230w\", \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/08a84/Node-RED_x22.png 460w\", \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/e9beb/Node-RED_x22.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/1a5c4584c1b9f6a42ecaf727f20a52be/e9beb/Node-RED_x22.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <h3 {...{\n      \"id\": \"adding-ssl-encryption\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h3\" {...{\n        \"href\": \"#adding-ssl-encryption\",\n        \"aria-label\": \"adding ssl encryption permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Adding SSL Encryption`}</h3>\n    <p>{`We are only going to use the MQTT protocol on our secure local network and decided to not encrypt the messages send by our IoT devices. If you plan to use the MQTT communication over the internet there is no way around wrapping those messages in an SSL/TLS encryption layer.`}</p>\n    <p>{`There are two (external) tutorials that will help you setting this up. The first tutorial shows you how to `}<a parentName=\"p\" {...{\n        \"href\": \"http://www.steves-internet-guide.com/mosquitto-tls/\"\n      }}>{`work with a self-signed certificate`}</a>{` and the second one helps you to set up `}<a parentName=\"p\" {...{\n        \"href\": \"https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-the-mosquitto-mqtt-messaging-broker-on-ubuntu-16-04\"\n      }}>{`Certbot and use Lets-Encrypt`}</a>{` to create the certificate and auto-renew it.`}</p>\n    <h2 {...{\n      \"id\": \"using-node-red-to-communicate-with-your-camera\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h2\" {...{\n        \"href\": \"#using-node-red-to-communicate-with-your-camera\",\n        \"aria-label\": \"using node red to communicate with your camera permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Using Node-RED to communicate with your Camera`}</h2>\n    <p>{`The Node-RED admin panel is a visual tool to string function nodes into functional flows. all the flows used in this tutorial can be downloaded from here and imported into the admin panel using `}<strong parentName=\"p\">{`Import Dialogue`}</strong>{`.`}</p>\n    <h4 {...{\n      \"id\": \"alarm-set-flow\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h4\" {...{\n        \"href\": \"#alarm-set-flow\",\n        \"aria-label\": \"alarm set flow permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Alarm SET Flow`}</h4>\n    <p>{`Please copy the `}<a parentName=\"p\" {...{\n        \"href\": \"/en/Node-RED_Flows/nodered_flow_set-alarm-office.json\"\n      }}>{`Set Alarm Flow`}</a>{` and open the import window on the Node-RED panel:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/de77644a0652a56220f72866709f214d/e9beb/Node-RED_x23.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"50.86956521739131%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABxklEQVQoz2NQlFfQ0dIO9vcPDw4JCwoOCgoKCg4ODgkNDgkNCg72DwgAc0OCQ0LCQ8MmF5QvKqkJdPHWNza1srBgWL969Y4tW1avWT1nzpwpU6dOnz4dxACDmbNmrli9euOWLRs2b169bt3kqVPNFVW1uAUF2dmFBPiMhEQY3nz6/Prr92+///z69fM/EvgHwv/WTZw0pay8OzevMye3NSnF3NhYQUNNXhEElBQUGK6fu7p33a5zx868e//+379/v3///vPnzx8w+fvnz8nt7aXpGWUZmVmxsSmhYVpq6vKyciLCIqKioiIiIgwPbpw9u3fVzYvHPn/+Arbs338M8O/fv4+fP9+9f19XT09BQUFGRkZISEhEWJjh4aunZ+9cufHgzqePHzE1/wW74vevX58/fbp27aq5ubmigoKEuLgQGDA8vf3g+tFzD2/c+fb9+38cAOKdly9fmpiYyMvLi4qKCoMBw6vXl2/eXPv06bnfv//i0fzr168XL14YGxvLy8uLiYmJgAHD7duXDhzYcOPG+T9//uC3+cWLF6ampjra2srKyoKCgiCb79y5d/Toidu37/7+/ZugzYZGhrIyMhISEhA/AwCQ1YZFJiMIXQAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/de77644a0652a56220f72866709f214d/e4706/Node-RED_x23.avif 230w\", \"/en/static/de77644a0652a56220f72866709f214d/d1af7/Node-RED_x23.avif 460w\", \"/en/static/de77644a0652a56220f72866709f214d/b6582/Node-RED_x23.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/de77644a0652a56220f72866709f214d/a0b58/Node-RED_x23.webp 230w\", \"/en/static/de77644a0652a56220f72866709f214d/bc10c/Node-RED_x23.webp 460w\", \"/en/static/de77644a0652a56220f72866709f214d/87ca7/Node-RED_x23.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/de77644a0652a56220f72866709f214d/81c8e/Node-RED_x23.png 230w\", \"/en/static/de77644a0652a56220f72866709f214d/08a84/Node-RED_x23.png 460w\", \"/en/static/de77644a0652a56220f72866709f214d/e9beb/Node-RED_x23.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/de77644a0652a56220f72866709f214d/e9beb/Node-RED_x23.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Paste the content into the input text field and hit the `}<strong parentName=\"p\">{`Import`}</strong>{` button:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/02a3043f456991f1ba27b712bed0e843/e9beb/Node-RED_x24.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"39.130434782608695%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABiklEQVQY013MTVObUBiGYX5rt3XawaAVx5Xr/gS76aqb1FqaIASI5gCeQwBpCZ8HSHJCqsYxaTuDGEehE23txzXP8r1fapNhtlmW2digafolTa8zzCuW/W9b7PZ6o/F8be311s6bnd1dmqEbKxQAPQQhgjAMwtl4PM/zm/mivJr/tavlt+9xFCmKonS7+skKAEBVVaolSO+5Q07opPbphecntkPcwSzGFzGeYTyL43OMfwThwLJESVIBAMfHOgDw4QUlNJsf9vZa+/upaXq2jSzL8/0girLhMElTnCbk7OtljF3D6MgyhBD0egghwzAgQpR4xB+IzbbUTtzBIoymjjN1Pl/6QTEaX49JMRyVZFKSPHBdSZbkB5qm6bquaRoliwr/URDaYjbMqrouiuK6LJe3t1X9S7Vc1i0+xVhVVdM0+78hhCi584nn3nUEbjLJV6fVU1XXVX1zf7eIkuzZi/iLe2KgP+lj3D3i2vxbWeY8z59Oc0LI5Akh2WgUnjrWwaHdN5GB+v/GPwEerXdukIhH9wAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/02a3043f456991f1ba27b712bed0e843/e4706/Node-RED_x24.avif 230w\", \"/en/static/02a3043f456991f1ba27b712bed0e843/d1af7/Node-RED_x24.avif 460w\", \"/en/static/02a3043f456991f1ba27b712bed0e843/b6582/Node-RED_x24.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/02a3043f456991f1ba27b712bed0e843/a0b58/Node-RED_x24.webp 230w\", \"/en/static/02a3043f456991f1ba27b712bed0e843/bc10c/Node-RED_x24.webp 460w\", \"/en/static/02a3043f456991f1ba27b712bed0e843/87ca7/Node-RED_x24.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/02a3043f456991f1ba27b712bed0e843/81c8e/Node-RED_x24.png 230w\", \"/en/static/02a3043f456991f1ba27b712bed0e843/08a84/Node-RED_x24.png 460w\", \"/en/static/02a3043f456991f1ba27b712bed0e843/e9beb/Node-RED_x24.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/02a3043f456991f1ba27b712bed0e843/e9beb/Node-RED_x24.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`The Node-RED flow should be imported into a new tab, called `}<strong parentName=\"p\">{`SET Alarm Office`}</strong>{`. And it is a slightly modified version of the Node-RED flow we used for the `}<a parentName=\"p\" {...{\n        \"href\": \"/en/Advanced_User/OpenHAB_Home_Automation/IP_Camera_Control/#setting-up-node-red\"\n      }}>{`OpenHAB Tutorial`}</a>{`. Hit the red `}<strong parentName=\"p\">{`Deploy`}</strong>{` button to save and load the flow:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/fdd5cd38b14445815c9392339f327881/e9beb/Node-RED_x25.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"39.130434782608695%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABr0lEQVQY02WQTW7TQABGfRQuwD0aJc4fSlMJgSASnIQ7sGIBC6AqKkJCoBaEUKGixa3cxGlsj53UTmzHP4ntGc9M8bj2oIgNiKdv+xbvEx49eDgYDHq9XqvVEkWx2Wx2u91Go1GrbdVqW/V6vd1udzqdhije7/Vf3H389Nbte3d62zs72/2+gBDknBdFUTAGkwQmCWOMc35TblZVnHNeVRXB2A3DpaaR3T16TSGEGGPhmzQ5HQLX9S4d59N4fKRNbfunob401Dem+soyD5eLQJUmQAdxHKcpTAjJ4rhgRYaxcL77Wt7fD1x3qs/lk8uRBCLXsS6euaPnb+UfTw7ef9YMhqlhmCjLEITrMGR5XpYlIUQ4t09kW/JDH0OUrtZxtEqTNE1X+TXOywrlLL/Z4Ae+4zi2bUVRRCklhCCEBPUM6BdmFIQTzztUxsfm9Mqag8lsPvPYr00857ysKoxxWZb8LyilgqF8AcpXkkEJXO19lw5GmrdwFkPFkodJsKTEoSREgU2y9M9z/8jA/KDpHwmBvhVoZyoYmtnKzWansXac+Lo9e+ctjqKpguH6f/k3ueiPkhYWCwsAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/fdd5cd38b14445815c9392339f327881/e4706/Node-RED_x25.avif 230w\", \"/en/static/fdd5cd38b14445815c9392339f327881/d1af7/Node-RED_x25.avif 460w\", \"/en/static/fdd5cd38b14445815c9392339f327881/b6582/Node-RED_x25.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/fdd5cd38b14445815c9392339f327881/a0b58/Node-RED_x25.webp 230w\", \"/en/static/fdd5cd38b14445815c9392339f327881/bc10c/Node-RED_x25.webp 460w\", \"/en/static/fdd5cd38b14445815c9392339f327881/87ca7/Node-RED_x25.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/fdd5cd38b14445815c9392339f327881/81c8e/Node-RED_x25.png 230w\", \"/en/static/fdd5cd38b14445815c9392339f327881/08a84/Node-RED_x25.png 460w\", \"/en/static/fdd5cd38b14445815c9392339f327881/e9beb/Node-RED_x25.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/fdd5cd38b14445815c9392339f327881/e9beb/Node-RED_x25.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`We `}<a parentName=\"p\" {...{\n        \"href\": \"#configuring-node-red\"\n      }}>{`configured Node-RED`}</a>{` to display the admin panel on `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`https://<IP of your Server>/admin`}</code>{`. You can switch to `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`https://<IP of your Server>/reddash`}</code>{` to see the corresponding `}<strong parentName=\"p\">{`Node-RED Dashboard`}</strong>{`. Just type in your `}<strong parentName=\"p\">{`INSTAR Full HD cameras`}</strong>{` IP address and hit submit:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/2e6133c6353f52ace994097b8e96738c/e9beb/Node-RED_x26.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"51.30434782608696%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACWUlEQVQoz13ITU/TYAAA4P4FjwwC6j5kdLPt275du75d263AgG2MwcKFbA0gUZFg2IcTkMREOHjwB4iyAXPDgRtOJCgfZiaErUskJAZMvCgR9WcYPZo8pwdbH1fKU13fnt79tZy8SMe+L8XO0/Hz5eR5JnGxmvqZvf+f37npD3ODG7fkwpgTO7597WTCXhu5XI0aqlqjrjXqUYMeNdQ1gx5pqEcbdM2gRxtq/9S1v3My1nI82vxjmsWaWq5wENA0MOOEBSeMVrsFJwSeVZCD5yBgGCsBmtsoCBkZsYBhAMMQNLzUZLwTT2GtFrPqlmUReRTJLYsCzzsBEVUdEQ8b4vAAi4c4e1hiBiVaUx19nC3gwPs4u59pfZiKYVeNRsEl0izkkSiIiOT4gMh8nQl8nu0/XRg5fRT5Mhs8muqpxXxn071n89rpgnY2F/406c4/foBdN5t7XJJXQC6K4mw2YDaHOjq2t94U1vKZpecvVpbLm8V8NpvPZV+XiivpdHYlU9pYL6zlny0uYk6jKeT2yAwjUpQEgIsCfpLqVdGAV+xShC5FkJATQNYrO/s7xR6P4FWETgVZcVsymcSg0SQqbjsDcYqyAWAFQCWJkMKHVdTOAUTaZEi2C2w3guF20SdxIrDLkEQkPnMvgSGT6YZXDgu0D5IDPOVnqXGBqt9Eh5Od1XigFvfXJ5TdEWFv2FmdUKuJoJ4I6nFfJUKuzqcwh6V5Z5jeGYVPui1bw7A81DbV31H/eFApr++XXu5vFmp72wfljcrb0tG78vtXud1ivrJVPNzezGaW/gD4hOoaD/58IwAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/2e6133c6353f52ace994097b8e96738c/e4706/Node-RED_x26.avif 230w\", \"/en/static/2e6133c6353f52ace994097b8e96738c/d1af7/Node-RED_x26.avif 460w\", \"/en/static/2e6133c6353f52ace994097b8e96738c/b6582/Node-RED_x26.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/2e6133c6353f52ace994097b8e96738c/a0b58/Node-RED_x26.webp 230w\", \"/en/static/2e6133c6353f52ace994097b8e96738c/bc10c/Node-RED_x26.webp 460w\", \"/en/static/2e6133c6353f52ace994097b8e96738c/87ca7/Node-RED_x26.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/2e6133c6353f52ace994097b8e96738c/81c8e/Node-RED_x26.png 230w\", \"/en/static/2e6133c6353f52ace994097b8e96738c/08a84/Node-RED_x26.png 460w\", \"/en/static/2e6133c6353f52ace994097b8e96738c/e9beb/Node-RED_x26.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/2e6133c6353f52ace994097b8e96738c/e9beb/Node-RED_x26.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`This flow can, of course, also be used with any other IP camera model - you just have to exchange the CGI commands used with the one that you need from our documentation for `}<a parentName=\"p\" {...{\n        \"href\": \"/en/1080p_Series_CGI_List/\"\n      }}>{`Full HD`}</a>{`, `}<a parentName=\"p\" {...{\n        \"href\": \"/en/720p_Series_CGI_List/\"\n      }}>{`HD`}</a>{` and `}<a parentName=\"p\" {...{\n        \"href\": \"/en/Advanced_User/CGI_Commands/VGA_Series_CGI_List/\"\n      }}>{`VGA`}</a>{` camera models:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/650436943ff224ac6ab06f0510d12378/e9beb/Node-RED_x27.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"51.73913043478261%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB0ElEQVQoz3WO60/aUByG+/8nUxLmgsFsQ4gbmQ5pKoVyL9dSLjMmGjcyQIfZLKen5/IrPW2h29Qlu2TP+3x4v72vFI/Fnsfjsdjuswd2dnde7O0lEolkMplOpzP/4TCTeXWYlpqtTqtnmKY5NkdG1xj0BnfLJSXEtrHv+8G/CLGJIkutLfZTknKcyx9lc4oiq1qjXKuWqtPpdLVC1srmHADcv2UcoojrbWv/QFK1vFJ4V6po7X5/Mhkb5mA2n1sI+0G42Ubho5s/DaNgG1EAqVKqFgua3myNhqNh3xh0uovZDK0QWj0EWRyY53niNzwhfCGo40gVLaeeHel6uV1Xe9mX1dex2YchuB62sYMdjB1wuRDedruNfvHYAUDSivKZcqLrtW6n3pBzhUxqennFOTjYubcwsmkgXEIpshmAizDlsA7DIAgDxpiUzcsHb7N6qzMZn3e7ZrFQvL66oIQjCy2/3luIAPv54JvlEArYobbDfd9/Wj4tacclraHXOu2y0a41lDfTywmhDChh1HGBAXDX5cKDMPDCwBfeOtyEQRgQQqS88v5UOWk2yy1drRdkOZX4eHFOKbNtDASzz5/Wtwv3Zv7kYr6++yKE5/vix+3v8I3/x8LzPrMAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/650436943ff224ac6ab06f0510d12378/e4706/Node-RED_x27.avif 230w\", \"/en/static/650436943ff224ac6ab06f0510d12378/d1af7/Node-RED_x27.avif 460w\", \"/en/static/650436943ff224ac6ab06f0510d12378/b6582/Node-RED_x27.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/650436943ff224ac6ab06f0510d12378/a0b58/Node-RED_x27.webp 230w\", \"/en/static/650436943ff224ac6ab06f0510d12378/bc10c/Node-RED_x27.webp 460w\", \"/en/static/650436943ff224ac6ab06f0510d12378/87ca7/Node-RED_x27.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/650436943ff224ac6ab06f0510d12378/81c8e/Node-RED_x27.png 230w\", \"/en/static/650436943ff224ac6ab06f0510d12378/08a84/Node-RED_x27.png 460w\", \"/en/static/650436943ff224ac6ab06f0510d12378/e9beb/Node-RED_x27.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/650436943ff224ac6ab06f0510d12378/e9beb/Node-RED_x27.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{` Please read our `}<a parentName=\"p\" {...{\n        \"href\": \"/en/Advanced_User/Node-RED_and_MQTT/Introduction/\"\n      }}>{`Node-RED Introduction`}</a>{` for further details.`}</p>\n    <h4 {...{\n      \"id\": \"alarm-recording\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h4\" {...{\n        \"href\": \"#alarm-recording\",\n        \"aria-label\": \"alarm recording permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`Alarm Recording`}</h4>\n    <p>{`You can download this `}<a parentName=\"p\" {...{\n        \"href\": \"/en/Node-RED_Flows/nodered_flow_alarm_recording_outdoor.json\"\n      }}>{`Alarm Recording Flow`}</a>{` here. It is a combination of two Raspberry Pi projects:`}</p>\n    <ul>\n      <li parentName=\"ul\"><a parentName=\"li\" {...{\n          \"href\": \"/en/Advanced_User/openHABian_on_Raspberry_Pi/Projects/FTP_Snapshot/\"\n        }}>{`Triggered FTP Upload using Node-RED`}</a></li>\n      <li parentName=\"ul\"><a parentName=\"li\" {...{\n          \"href\": \"/en/Advanced_User/openHABian_on_Raspberry_Pi/Projects/Alarm_Recording_and_Nightvision/\"\n        }}>{`Alarm Recording and Nightvision`}</a></li>\n    </ul>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/a2bea133f94d051fa036220e38dcb200/e9beb/Node-RED_x37.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"91.30434782608695%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAIAAADUsmlHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADuElEQVQ4yzWS308cVRTH50mN0ZQuu1QE2d2Znd2dO3fuj7l3ZnZ+7fzYBQS6SNgq2iIWtpWAVAwmCqVZKkpKTaptZdUHDWr8baLhWS2paV+Mz8b4qi/LX2F2i598c3LOyfnm5CRHaK+j9iZvb7KjTXq0ljt6XT5ay7XX5AfqdLpqd5vHZWdGbq/lhCorPBvgEQv6FAR6sUyViIMpB9Y9ddJWIwPGBgwZGLM6ZagrZQp8WowNaCpZoQCgF4Sm7dp+4JRD3SypiIaV4Xh41HbLBaDJQCuoyLTdysjTXhgHlWE/rKhYH0yLAoRqHEcly4zjOIpC33W5wSPfnT93bvPK+pmxkYWxUQ8hx3UnxsfskuU4tu97OqWimBWQpjmu47gOxlhVVQAAoYRrxdXFxucH361vbey39mqV2LLtidMTnDHbcTzPpZRms1kBYxxFkWFwSin5n+n6ZGOp0bzx7oXVVy6/tT03fwEAxbIsQghCyDRNg/OuGaFKHBmccaYbnBlMp4QwxjGmnBslyyx7nm2WKCHc6GBaFkIIYSyKogAxMf2ooOmAsLxGOwnGgCPIkajBDFQzGhyCqmXbQRBYluU4jt6lY66Zha8adusFemVC3X/RaM3SOQQ+OZX7VEatvL6Xo61BcCMlVbnhlH29exqllHMuSZJQ1qQ3TrPXxuhMKf9ylbwUw3qx+HE/aOX5TRHflMjtAeV6Sqxy0w9Dg/MHa4/NeYJUpyRRAlxPNG3JciVKoGOxsm+EAeRMpQToxCpZcVBmlHBdN5huGV3z2YLWZO4q5Neq4+vMeRPoM5AYRDs/NXXro9vLC3M7K8uznk8Ny/RjxG1AuAyJgrkoScJ7jw388bh4N00PB/Gdfnj/oYHdwYJh66825j87+GFju/nBh62V5ZUpF70/F7w9Yy9W4PYZc2uaqXJWyEAFuga06CDGpzTUh4lE6XMz9Znzs5cubzQuLS0sXlxaW5+0iten0dUaXK4ou3VytaaCXFoYpcrFYbsx4p719WlenPNJzWGKCju/BgBCGuc6pRQSVqSWjJgEkASp7oSynBf2Z8v/bk39ufX837vzfzXr/zSf2ZuNTJP4JR1ipGga6ERICS6ZBtcp1iDTqe85ci4nXNvZuXt45/tvv/n6yy8Ofvrx8Ndf3mk2Q8Kqpu1q2NFQrRxNBuETfX2JRCKZTKZSqWQymUgkent7hScHBoYy2afSmaFMNp3OpDKZ8f707w8P/dan3s8a90Tz3gn550eGlJ7eR3tOnOw55mSX/wCyZRs2BkU7rwAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/a2bea133f94d051fa036220e38dcb200/e4706/Node-RED_x37.avif 230w\", \"/en/static/a2bea133f94d051fa036220e38dcb200/d1af7/Node-RED_x37.avif 460w\", \"/en/static/a2bea133f94d051fa036220e38dcb200/b6582/Node-RED_x37.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/a2bea133f94d051fa036220e38dcb200/a0b58/Node-RED_x37.webp 230w\", \"/en/static/a2bea133f94d051fa036220e38dcb200/bc10c/Node-RED_x37.webp 460w\", \"/en/static/a2bea133f94d051fa036220e38dcb200/87ca7/Node-RED_x37.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/a2bea133f94d051fa036220e38dcb200/81c8e/Node-RED_x37.png 230w\", \"/en/static/a2bea133f94d051fa036220e38dcb200/08a84/Node-RED_x37.png 460w\", \"/en/static/a2bea133f94d051fa036220e38dcb200/e9beb/Node-RED_x37.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/a2bea133f94d051fa036220e38dcb200/e9beb/Node-RED_x37.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`The first one enables you to manually upload a snapshot via FTP. And the second uses the PIR Motion Detector of your camera (of course, only applicable to camera's with PIR sensors) to detect motions, activate the nightvision LEDs and start a 1min Recording on the internal SD card of your camera every time an alarm is triggered. The use case is - you want to disable the IR nightvision LEDs during the night, which saves you electricity, makes your camera less intrusive and prevents the spider web problem (insects love the warm and illuminated front of your camera).`}</p>\n    <h5 {...{\n      \"id\": \"ftp-snapshot\",\n      \"style\": {\n        \"position\": \"relative\"\n      }\n    }}><a parentName=\"h5\" {...{\n        \"href\": \"#ftp-snapshot\",\n        \"aria-label\": \"ftp snapshot permalink\",\n        \"className\": \"header-link-icon before\"\n      }}><svg parentName=\"a\" {...{\n          \"aria-hidden\": \"true\",\n          \"focusable\": \"false\",\n          \"height\": \"16\",\n          \"version\": \"1.1\",\n          \"viewBox\": \"0 0 16 16\",\n          \"width\": \"16\"\n        }}><path parentName=\"svg\" {...{\n            \"fillRule\": \"evenodd\",\n            \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n          }}></path></svg></a>{`FTP Snapshot`}</h5>\n    <p>{`To use this flow, we will need to configure an FTP server on Debian 9 Stretch Linux allowing our INSTAR IP cameras to upload snapshots and videos when a motion alarm was triggered. The following tutorial will explain how to install and configure FTP server using `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`vsFTPd`}</code>{` daemon.`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`apt-get`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`install`}</span>{` vsftpd `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`ftp`}</span></code></pre></div>\n    <p>{`By default, the vsFTPd server comes configured to allow system users to access their home directories with read-only access. We will have to make changes to the vsFTPd config file `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/vsftpd.conf`}</code>{`:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`nano`}</span>{` /etc/vsftpd.conf`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/e9beb/Node-RED_x28.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"31.304347826086953%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAIAAABM9SnKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABG0lEQVQY00WLCUrDQBiFcxUFi8lk/tknk0mn2WqJdsnSJGqrtnqDgvdHogXh4/EWnvdxqoe35vm9O5yH43k8fo7Hr/FwGruha/Zd0zW7tm77dnwd/jmMdV9fvi+eW6IoD3WKTIFkEigXmCJQDimHtEM6RcJOPdMBSD8AP8B+SNDt7GbXbr1yy/Mnnla82IhiLRYrnj7yYnOl3HK34nHKzZwbx1TMhKRSMwT+8NJ7xZplFV08UJsRtyQ2I3FGkpLajNqcmMVEnJK/VVugHLgiPpr1Q+u5EowDmxEZgY5BxaDMpNKAjH5NBEJPUceYCUw5ZgKu53KtikrNS7AZTnKwKSQ5jhIsNZYRlgYLjbmajJrOIWEhFfg+uNv3zQ+swVUn3P2uKQAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/e4706/Node-RED_x28.avif 230w\", \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/d1af7/Node-RED_x28.avif 460w\", \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/b6582/Node-RED_x28.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/a0b58/Node-RED_x28.webp 230w\", \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/bc10c/Node-RED_x28.webp 460w\", \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/87ca7/Node-RED_x28.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/81c8e/Node-RED_x28.png 230w\", \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/08a84/Node-RED_x28.png 460w\", \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/e9beb/Node-RED_x28.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/dd3be1dd32985e6773bbecb90c81b1cb/e9beb/Node-RED_x28.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`The result should look something like this:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`listen`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`listen_ipv6`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`local_enable`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`write_enable`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`dirmessage_enable`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`use_localtime`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`xferlog_enable`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`connect_from_port_20`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`secure_chroot_dir`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`/var/run/vsftpd/empty\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`pam_service_name`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`vsftpd\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`rsa_cert_file`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`/etc/ssl/certs/nginx-selfsigned.crt\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`rsa_private_key_file`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`/etc/ssl/private/nginx-selfsigned.key\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`ssl_enable`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token comment\"\n          }}>{`# implicit_ssl=YES`}</span>{`\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`listen_port`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span><span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`21`}</span>{` \n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`allow_anon_ssl`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`force_local_data_ssl`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`force_local_logins_ssl`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`ssl_tlsv1`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`ssl_sslv2`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`ssl_sslv3`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`userlist_file`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`/etc/vsftpd.userlist\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`userlist_enable`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`userlist_deny`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO`}</code></pre></div>\n    <p>{`We are using the `}<a parentName=\"p\" {...{\n        \"href\": \"#create-the-ssl-certificate\"\n      }}>{`SSL Certificate`}</a>{` that we generated for our NGINX server (of course you can also create a separate certificate for Node-RED following the instructions from the link above) and tell Node-RED to enforce SSL encryption. Note that we `}<strong parentName=\"p\">{`cannot use implicit SSL`}</strong>{` - as our Full HD cameras only use explicit encryption.`}</p>\n    <p><strong parentName=\"p\">{`You can skip this part for HD and VGA cameras`}</strong>{`, as they do not support FTPS. Just leave `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ssl_enable=NO`}</code>{` to deactivate the encryption.`}</p>\n    <p>{`The above config file will only grant a `}<strong parentName=\"p\">{`read-only`}</strong>{` access to any system user listed within `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/passwd`}</code>{` file. To add `}<strong parentName=\"p\">{`write access`}</strong>{` for all system local user uncomment or add the following stanza `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`write_enable=YES`}</code>{`. The new configuration file consists of:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"728px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/cecac/Node-RED_x29.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"21.73913043478261%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAt0lEQVQI103IyQ6CMBRAUT7HqvS1fS1QsILTAo0ulKEoqCFqNPH/16ZuNDm5i+vdXufL7dQ/u8e7v9676+P01Xa9tW1V2rKoi9KWx/PR6ZymbQ7VvrCFZ5YyTlFnqFNJcQSKgCJUElBDioSMnaFPyHjwzx1/4K13Sb6d5BuTLYJ4xpO5iDNHp66h4dGUY8BR/QiHCcW8epXYlWmWZjuRMqKBBhWBjECGgCFIDUEMHOk/hpQJnwn/AygMOoFGcyDKAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/e4706/Node-RED_x29.avif 230w\", \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/d1af7/Node-RED_x29.avif 460w\", \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/b8765/Node-RED_x29.avif 728w\"],\n              \"sizes\": \"(max-width: 728px) 100vw, 728px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/a0b58/Node-RED_x29.webp 230w\", \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/bc10c/Node-RED_x29.webp 460w\", \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/8cb3e/Node-RED_x29.webp 728w\"],\n              \"sizes\": \"(max-width: 728px) 100vw, 728px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/81c8e/Node-RED_x29.png 230w\", \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/08a84/Node-RED_x29.png 460w\", \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/cecac/Node-RED_x29.png 728w\"],\n              \"sizes\": \"(max-width: 728px) 100vw, 728px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/16c379f712f5c2ee6ea0c03ed9851f80/cecac/Node-RED_x29.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`By default, our FTP server allows access to any system user defined within `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/passwd`}</code>{` file. In order to allow only specific users to be able to login we can include the following lines into our configuration file:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`userlist_file`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`/etc/vsftpd.userlist\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`userlist_enable`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`YES\n`}<span parentName=\"code\" {...{\n            \"className\": \"token assign-left variable\"\n          }}>{`userlist_deny`}</span><span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`NO`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/462daf7e429229bbe3c2db279d55dc4b/e9beb/Node-RED_x30.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"44.78260869565218%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABdElEQVQoz1WQa0/CMBSGu3FTkEkEw4LXSJC5tkTYacdC26kbu6P+Lv+Kf9KUqYHkST+c9Mn7noNw8e6klZOVuKimUTYRb9cqtjevVyq2ZTwW0WAdDnzVZ9LyVXOxRpghsgcz5Ba7x6Rw8x3Od/O0nKflY1rOksItdndRZsv4nKvOMkAYEGYG+TNrmZafT1k13UbDQAx8NQzC4TocBRqLyz6TPU8YlBtEc2Rqufpw8uohSqwlb1HeIKzGJHUOIBfQofZvYkBP5ccszadxch1ubSbalDeo36C+qfkNNI4cjYF1ALp5y27E6xn9W+ngB6or6MPA0dwFE8PJgiFbbS+CF4uHPSa6IE492fVkhykDRBOExeU5Vz1P/B5MB3DkQpvACQE0eUkvRWSHyUiGZ2zT9WR7JcaUey7cU95f+OZi3dDCPpCwJuUGZi0MutE8f7+NcicpRzzorER3tUHLzXb+/H3vfE3J0lkhzMy69v419WqgJy78AJ7FV0359HenAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/462daf7e429229bbe3c2db279d55dc4b/e4706/Node-RED_x30.avif 230w\", \"/en/static/462daf7e429229bbe3c2db279d55dc4b/d1af7/Node-RED_x30.avif 460w\", \"/en/static/462daf7e429229bbe3c2db279d55dc4b/b6582/Node-RED_x30.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/462daf7e429229bbe3c2db279d55dc4b/a0b58/Node-RED_x30.webp 230w\", \"/en/static/462daf7e429229bbe3c2db279d55dc4b/bc10c/Node-RED_x30.webp 460w\", \"/en/static/462daf7e429229bbe3c2db279d55dc4b/87ca7/Node-RED_x30.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/462daf7e429229bbe3c2db279d55dc4b/81c8e/Node-RED_x30.png 230w\", \"/en/static/462daf7e429229bbe3c2db279d55dc4b/08a84/Node-RED_x30.png 460w\", \"/en/static/462daf7e429229bbe3c2db279d55dc4b/e9beb/Node-RED_x30.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/462daf7e429229bbe3c2db279d55dc4b/e9beb/Node-RED_x30.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`The above will enable a predefined user list where any user listed within `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/vsftpd.userlist`}</code>{` will have access to the FTP server. Let's first create a new user for the FTP service called `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ftpuser`}</code>{` by typing the following command and adding a UNIX password:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` adduser ftpuser`}</code></pre></div>\n    <p>{`Let's create a new `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/vsftpd.userlist`}</code>{` user list and add our `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ftpuser`}</code>{`:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token builtin class-name\"\n          }}>{`echo`}</span>{` ftpuser `}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`>`}</span>{` /etc/vsftpd.userlist`}</code></pre></div>\n    <p>{`Next, restart your vsFTPd:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` systemctl restart vsftpd`}</code></pre></div>\n    <p>{`You can check if the FTP service is running on port 21 with the tool `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`netstat`}</code>{` - but you might have to install `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`net-tools`}</code>{` first:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`apt-get`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`install`}</span>{` net-tools\n`}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`netstat`}</span>{` -npl`}</code></pre></div>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/e9beb/Node-RED_x31.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"56.95652173913044%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB6ElEQVQozx2SQW7bMBAA9ZhGJJe7XHIpUhJFS7IdJ05sx4GTtAVa9FD0/28oEmDOgzlMc72er6/nt9v58nK8XB6vL8fT+dB1Pgh1yUvkEJ1E5xiYwbHxAUKwIp80j0/3j8f7y+Xh+XQ4Hven0+Hp+bDbL+tuMy9l2dZ5mYYxhgDoDDoTAoYAIhCjbXb7zVT7dR3Xbd3MZX+/rZuBA3lxZcqbpdSaY7Qp0XY7sbcph6nmWnPf+yangGS+Sihlmecx50DOOLbj2I1jl6JN0UqAdRlFEEk5p5m1Z91IL4YMBfTJ5ymvh2WcR0PaMsQhdmPnBViM9aauJSRvnDakjNPW6eapj9XZfeSHXo5jei79Q5YJ1ezMIcddxwubmXQl87rd7LtQrCpWTaQX0s2/1H04/Mn4i+FPx7+F3qF9h/YG6gfjG6g30Lcv/o7DB8Kram+gv6P5QNPkkjQpZCMRhiJlk61TQEqTdkIttApVa1uNqq4TRwdsgUGTMqSbqSTHVsRlsbXEMgSmlkghqiAEtjVwZ+COSK9LScmzR0QFtgXbNlMdHKP32Iktg+TkEL4htoDaBwdWGas03Bnb1nlIHXlvmI1jILZNzgKomE2KdhxC3/suEpFGMvHzM2dJG/vpKrUXQec0OY2kLar/dzSFoMwAwqkAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/e4706/Node-RED_x31.avif 230w\", \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/d1af7/Node-RED_x31.avif 460w\", \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/b6582/Node-RED_x31.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/a0b58/Node-RED_x31.webp 230w\", \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/bc10c/Node-RED_x31.webp 460w\", \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/87ca7/Node-RED_x31.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/81c8e/Node-RED_x31.png 230w\", \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/08a84/Node-RED_x31.png 460w\", \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/e9beb/Node-RED_x31.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/f8a0249d4a5979f53c5f7969673f4bc7/e9beb/Node-RED_x31.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Now open port 20/21 in your firewall:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` firewall-cmd --permanent --zone`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span>{`public --add-port`}<span parentName=\"code\" {...{\n            \"className\": \"token operator\"\n          }}>{`=`}</span><span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`20`}</span>{`-21/tcp\n`}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` firewall-cmd --reload\n`}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` firewall-cmd --list-all`}</code></pre></div>\n    <p>{`You can test access to your FTP server using your default web browser - just prepend a `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ftp://`}</code>{` to your Linux servers IP address, e.g. `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ftp://192.168.2.111`}</code>{`, and log in with the `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ftpuser`}</code>{`:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/3af914301eb636f51b803eba4632eec1/e9beb/Node-RED_x32.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"47.82608695652174%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABEElEQVQoz32RwU7DMAyG+6477TV4Bx6CG3BA4j7GAQEChLqunDkwjbVJnDh27KB0Q2JdxadPkQ/+EyepZrPZfD6/vLp+eHxa3C2X9/fvdb1uP1bN+sj1waZtm7atV83L61tlfzHG7Iu+7wEgj9CiDuScEdEYU417VPvdbrPZfG+3EZGZKRIzj9pSSqpa6TEi4r33AM5acICIwfuIOGojIhGZONl7H0JwDrquJ05EHIkxkg8EgTAWw7DdRNga6wAsxF3nAjLGVCQZbquRBUl8iPk0LCIppVLokUnyoqbbZ+ocI2KMpJNhRKQB5oOJy6jnN+bsov/8cmDLd0yPzQN0gmoqz8zMw5JzHof/YT//X34A0dc/DSAJZQUAAAAASUVORK5CYII=')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/3af914301eb636f51b803eba4632eec1/e4706/Node-RED_x32.avif 230w\", \"/en/static/3af914301eb636f51b803eba4632eec1/d1af7/Node-RED_x32.avif 460w\", \"/en/static/3af914301eb636f51b803eba4632eec1/b6582/Node-RED_x32.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/3af914301eb636f51b803eba4632eec1/a0b58/Node-RED_x32.webp 230w\", \"/en/static/3af914301eb636f51b803eba4632eec1/bc10c/Node-RED_x32.webp 460w\", \"/en/static/3af914301eb636f51b803eba4632eec1/87ca7/Node-RED_x32.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/3af914301eb636f51b803eba4632eec1/81c8e/Node-RED_x32.png 230w\", \"/en/static/3af914301eb636f51b803eba4632eec1/08a84/Node-RED_x32.png 460w\", \"/en/static/3af914301eb636f51b803eba4632eec1/e9beb/Node-RED_x32.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/3af914301eb636f51b803eba4632eec1/e9beb/Node-RED_x32.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Note that the directory that is used for the `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ftpuser`}</code>{` is his `}<strong parentName=\"p\">{`home`}</strong>{` directory in `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/home/ftpuser/`}</code>{`.  You can use a tool like the `}<a parentName=\"p\" {...{\n        \"href\": \"https://filezilla-project.org/download.php?type=client\"\n      }}>{`Filezilla Client`}</a>{` to login to your FTP Server and upload a file to check if the write access is working (the advantage of using Filezilla over just trying to send an image directly from the FTP service of your INSTAR Full HD camera is, that Filezilla will give a more thorough error report, in case that something goes wrong): `}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/e9beb/Node-RED_x33.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"96.08695652173913%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAIAAAAf7rriAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADMElEQVQ4y2WS227bRhCG9UZ1kNz4CXLVVyvQqwItGhu5aQukTpo4bgPXMeIUgS1ZoiieKZ5ELrkHcg9ciqTlWGZBCY7j9sNiMVjMP7NzGIgkqepm2bRVXS/rpm6aZdsum/rq+nrddevb25v+rNd39213z6AsWAiwFcELB0zi0HbMbDjmmNA0W7Kco2BJcHf1+aZu1k27rtu6Wso7BmemdmzM/rb082RxbKjHmnKqq6MkmmTxiT490ZXj2fh4pgwX/ntDHSWhEwaaqmqaFgTBYPfg2eOXPz158cOTt3uPjvYfHe3v/Lm/c9TbO2/3do72vjn8+fFfz3ff/7p78svOu+eHntl9vmnadrVaDeaXP/rWWNMM27Jd23EcNwpDgnGWpnBDlqZFUZRlKcuSC54z1nXdtvYBwQsEEtd2qlJWpUgBSBZx6Puc0rqqlmW5rKqqLKUQUgjBWMH5vRjlBUjAdKomSYIx1nVdUaaT8XixiKXs/YUQnPMvhhsEGGOyYYByApJYmSiTy4ltWoahT6fTOI4JIXme5yRnjH2JwjgHCK3uGEBCEIS2ZXtzz/d9RVGGPaPLy8vhxXA0Glq2DSFkjJVlyRjN+Vc1Q4IJxkEQhmGUZVme52gDhDDcAACAEHHOpZSMc0zp1zWTFICpojiWbRqmZVkAAARhTnJD1zVVi8LINMw+9Kb/AKPmjo04Aa7jcM49z7NMy3VcBBFGyDItjHGapoZuOI6bJAAhTLaj6u4ygzhR1dnWKQoXCCJCckrpbKpGYeR7nm07GGMIEWWMMHov7huGoOf5ZVkuosjQ9ShaYEwopZ47p5RhjDR1NnfnGYRFUTzI3IuzNPB9kCQYoZzkQnDZN5ZtB9u3SohSllL2jw8yoyIHEBquG0OkGkYM0TyKzM3YCCGlEKKu+WolGN8s2H++jVA2UZwPZ+7ZR/fsY3R+EX469//5xCjtl7lp+GjMfnsh2lZw/j9xCvDpB/vglff60Dn4Y/7qjfX7y+D1GwIRQUh0Hf/ue/r0W7FabcUPliQlWLYtlZJWklUVqypayULKoigYLYiQ6tgcn17M0zzw5kEYpgRfX19fbdbzXy288MysPoBlAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f0d5364c82d7c4b01d609f8701be34b5/e4706/Node-RED_x33.avif 230w\", \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/d1af7/Node-RED_x33.avif 460w\", \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/b6582/Node-RED_x33.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f0d5364c82d7c4b01d609f8701be34b5/a0b58/Node-RED_x33.webp 230w\", \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/bc10c/Node-RED_x33.webp 460w\", \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/87ca7/Node-RED_x33.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/f0d5364c82d7c4b01d609f8701be34b5/81c8e/Node-RED_x33.png 230w\", \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/08a84/Node-RED_x33.png 460w\", \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/e9beb/Node-RED_x33.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/f0d5364c82d7c4b01d609f8701be34b5/e9beb/Node-RED_x33.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`Now it's time to try to upload a test image from our INSTAR Full HD camera to the FTP server. Let's create a folder `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/home/ftpuser/outdoorcam`}</code>{` on our Linux server and add the FTP information to our camera configuration and press `}<strong parentName=\"p\">{`Apply`}</strong>{`:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/7aca2d534c2a50b572d649e57eebf389/e9beb/Node-RED_x34.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"69.1304347826087%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACeUlEQVQ4y4WSW08TURSF5y/qi+VdgjdM6cy0AxSUSjQk+CCamBAhMUCCT/gAbbkHaKG2hARNRHnAqKFVMUAvM51b+5lzStEKxp18mZ2ZnTXr7HWUwLUAV65eJdbfT2p+gfXELKvzsyTmXrO8MMfWxsp/2dxYIbW2xOryIkowGCQUChHWdQyjh9v3R+mITdARe8nNwQluDE5d5IFgssHgFJ0Pp+gcesV1fQhFiGmaRiSs06UZ3Hmeo33sEx0v9mkf3Sfw5D2BkVbaBE/3GozscWvsI+p0gbbeSRQ9HEEQUnV6o1EOPn+lbNqclEzMqotley1UHY+KZXNaqnBaMht92cIH5hJJlJCmo+lhulSN7p5evn8r4HsuNd/jXyW+Vy0T267K3nMd+T6ZiKN0qUKw4VAI5vN5HNfFtm3qQL1eb0GUbTtUq1U8z8N1XdmLisfjKKoWRhAMCYdRCoUCvu9Tq9XkUFPkT0HHcahUKnJOiIqfi0okEijdhoFw2ThyVDoUA5ZlXRBqPoWrYrGIaZqybxGMRCJyh6qmE+3rkw6bDuSxL3EoRMrlshQVs4IWwWbKRnOH0qFJvV67VNB2PU5LJbm7Cw4No+HwPJRCAa9Wx3Lc81T/PnLNMrFOjrFdR14X92zf8YagQfBshz29UQr5Q/Aq+JVjfPNEXh8RkAzK96kAh3cN8vo9rDo4Rz+xfhyB55NMJlGMSESmHFJVuvsGOPmyB2uPYCkGG4/F/1vu4OxukeHxHYanP7Acf0tejXIQHuD42Tjvdnd/hyKSjhjdLC4usJ3ZJJNeJ7uVIpfLnbO9nWMrk2Vze0eS2cqQTad5k0qzk80yMzPDL87GpMLeXZDyAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/7aca2d534c2a50b572d649e57eebf389/e4706/Node-RED_x34.avif 230w\", \"/en/static/7aca2d534c2a50b572d649e57eebf389/d1af7/Node-RED_x34.avif 460w\", \"/en/static/7aca2d534c2a50b572d649e57eebf389/b6582/Node-RED_x34.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/7aca2d534c2a50b572d649e57eebf389/a0b58/Node-RED_x34.webp 230w\", \"/en/static/7aca2d534c2a50b572d649e57eebf389/bc10c/Node-RED_x34.webp 460w\", \"/en/static/7aca2d534c2a50b572d649e57eebf389/87ca7/Node-RED_x34.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/7aca2d534c2a50b572d649e57eebf389/81c8e/Node-RED_x34.png 230w\", \"/en/static/7aca2d534c2a50b572d649e57eebf389/08a84/Node-RED_x34.png 460w\", \"/en/static/7aca2d534c2a50b572d649e57eebf389/e9beb/Node-RED_x34.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/7aca2d534c2a50b572d649e57eebf389/e9beb/Node-RED_x34.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p><strong parentName=\"p\">{`Note`}</strong>{` that we added `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`TLS encryption`}</code>{` just as we defined it in `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/etc/vsftpd.conf`}</code>{`:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"text\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-text\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-text\"\n        }}>{`ssl_tlsv1=YES\nssl_sslv2=NO\nssl_sslv3=NO`}</code></pre></div>\n    <p><strong parentName=\"p\">{`Note2`}</strong>{` that we need to use the `}<strong parentName=\"p\">{`PORT Mode`}</strong>{` since we are operating the FTP server behind a firewall!`}</p>\n    <p>{`We now just have one issue left - the files will be uploaded to the `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/home/ftpuser`}</code>{` directory and will be owned by the `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`ftpuser`}</code>{`. Since we are going to start the Node-RED process with a different user - `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`nodeadmin`}</code>{` - we have to make sure that the files can also be handled by Node-RED. Type `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`sudo nano /etc/vsftpd.conf`}</code>{` and add the following line:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"text\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-text\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-text\"\n        }}>{`local_umask=0002`}</code></pre></div>\n    <p>{`You can also make the uploaded files executable - if that is something you need... `}<strong parentName=\"p\">{`potential dangerous`}</strong>{` - by changing this line to `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`file_open_mode=0777`}</code>{`.`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/eaa75273d85ec9afcc2b93818c899402/e9beb/Node-RED_x35.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"61.73913043478261%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACs0lEQVQozyWMW0/TYACG+zcMILD1sLXr+n3t1sO+rR1DxpiM49iAcRQw3nhDoj/AeKNGDTEeLiRGf4c3JiYmeAcKBAFBcMAYh8K2rlu3GiR58+bNkzwvlt3Z+PN39zC3W7i4fL24kB6LT8+lx2eSydHExNzQzNTAvfG+uUzv3UzP7PTg5GxqbCKdGUsPpfofPJzHtn9v5o9zhWLZtu1Xb59CEUcaH1ChEoJqu1/RAJBo1k/RPMEJbi+gaIb0sG6caOnrT2B7W+vLS0srP1dLJfP94oJXoEMRFOlAUgAqiBcVTlKAX/YC6BYl6Beh4OMU5IOQGcmksPze3kU+r+dztm1/ePkoJrYOd/DhECcGGKRyAQ0gFQY0oKgcUiHSYDDMS0EOiOT4VBL7trW/U6hsXZpZ23628DzS7uu+HU5EYAAxSIOhCFQjQjDCySEP0gBqY5UQx/u9NEuMZJLYp43cx9Xsu5X9Nz+yT74sP/78/cXX5YHRHlmhAyqUEKeEgIw4CQEZ8YGQIMm8JPsA9KTSScy26+XCZelCL+rn5WLBMsv1Wu3+/HS4U4j3qrFEMJZAbVF/UBNECYgSL0q8JAscYNLDSaxsVoxy+fw4f5I9KJyelQyjVDam70yIIh9pV7VwUAsjFJRkWbjWJFmQFR8ETCo9iOm6fnZymv+1fbS2fry2njvK6bo+MTlKuZw0S9Ee0s2QLuaqaQ9FM1eEYV1OoqWrO4ZVq1XDMC4KhaJhVGo1y7JMs9LX39vU2ki4ccLlxEkHTjpIqpWkHAR1tQnK2djcEI3dwur1umkaRqlYs6xKqVitVCyrOjAUd5A3vJBggYMFBMPhDMAp5v8X5SBczqbmhs6uKGZa9dzl2eHpiWnV/mxu7R8cGlVreGyQYXHBz9IscRUad9POa/NavtnS0BmP/gNOUzWp5f1VewAAAABJRU5ErkJggg==')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/eaa75273d85ec9afcc2b93818c899402/e4706/Node-RED_x35.avif 230w\", \"/en/static/eaa75273d85ec9afcc2b93818c899402/d1af7/Node-RED_x35.avif 460w\", \"/en/static/eaa75273d85ec9afcc2b93818c899402/b6582/Node-RED_x35.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/eaa75273d85ec9afcc2b93818c899402/a0b58/Node-RED_x35.webp 230w\", \"/en/static/eaa75273d85ec9afcc2b93818c899402/bc10c/Node-RED_x35.webp 460w\", \"/en/static/eaa75273d85ec9afcc2b93818c899402/87ca7/Node-RED_x35.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/eaa75273d85ec9afcc2b93818c899402/81c8e/Node-RED_x35.png 230w\", \"/en/static/eaa75273d85ec9afcc2b93818c899402/08a84/Node-RED_x35.png 460w\", \"/en/static/eaa75273d85ec9afcc2b93818c899402/e9beb/Node-RED_x35.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/eaa75273d85ec9afcc2b93818c899402/e9beb/Node-RED_x35.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <p>{`To open the `}<code parentName=\"p\" {...{\n        \"className\": \"language-text\"\n      }}>{`/home/ftpuser`}</code>{` directory to us type:`}</p>\n    <div {...{\n      \"className\": \"gatsby-highlight\",\n      \"data-language\": \"bash\"\n    }}><pre parentName=\"div\" {...{\n        \"className\": \"language-bash\"\n      }}><code parentName=\"pre\" {...{\n          \"className\": \"language-bash\"\n        }}><span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`sudo`}</span>{` `}<span parentName=\"code\" {...{\n            \"className\": \"token function\"\n          }}>{`chmod`}</span>{` -R `}<span parentName=\"code\" {...{\n            \"className\": \"token number\"\n          }}>{`777`}</span>{` /home/ftpuser`}</code></pre></div>\n    <p>{`This way we are able to set the directory to be the Static Directory of our Node-RED Dashboard and display uploaded images:`}</p>\n    <p><span parentName=\"p\" {...{\n        \"className\": \"gatsby-resp-image-wrapper\",\n        \"style\": {\n          \"position\": \"relative\",\n          \"display\": \"block\",\n          \"marginLeft\": \"auto\",\n          \"marginRight\": \"auto\",\n          \"maxWidth\": \"730px\"\n        }\n      }}>{`\n      `}<a parentName=\"span\" {...{\n          \"className\": \"gatsby-resp-image-link\",\n          \"href\": \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/e9beb/Node-RED_x36.png\",\n          \"style\": {\n            \"display\": \"block\"\n          },\n          \"target\": \"_blank\",\n          \"rel\": \"noopener\"\n        }}>{`\n    `}<span parentName=\"a\" {...{\n            \"className\": \"gatsby-resp-image-background-image\",\n            \"style\": {\n              \"paddingBottom\": \"34.34782608695652%\",\n              \"position\": \"relative\",\n              \"bottom\": \"0\",\n              \"left\": \"0\",\n              \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABjElEQVQY0x3IW2vTUAAA4PwMQYU1Pbfk3M9pcpI0oxMffJhosbRr161e97fEP+KjdNN5aQcyLOk6t0WaThi+KHhB9O3j82YH44+HL8+OpuMPk9GTneFo8Ojp7rO9nYePB/3+g95Wu9O91+m1u/9wv9NrD4a94Wh7e7e/Neh6q0Xxo1r9+nb1+eJUxcqXjDkjY8EsU04oJ0TEsCDChtJJnhjAcZ3U1vwb129e86pqXlbLn39+L5dfslYm1jO7kQunVZ6IWDErqOFUM2YEb0iqWaBoqGjAMaLQW5wW7yeT1eVlWZ67dRdEmjkbNBTWDMmQaI4oBgTAECFOEMXUcBap/1n3ZvNPb969XVycFyfzrJWqprOt3OSJSqx0ljvDYksbWjhjU6uzBosUIH4drQFU8w6PXr3eH59Np8VJsXmruZnFdzJ3txm18/i2syq1PDY6tTqxzHAiQyIZCiFANYB9r7r6Wh4ff3/+opzPko2MxIanUWA4YghSiEKIQoBCCAMAA4ApxBRCUgfYB8j/C4+jjXnFgmBKAAAAAElFTkSuQmCC')\",\n              \"backgroundSize\": \"cover\",\n              \"display\": \"block\"\n            }\n          }}></span>{`\n  `}<picture parentName=\"a\">{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/e4706/Node-RED_x36.avif 230w\", \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/d1af7/Node-RED_x36.avif 460w\", \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/b6582/Node-RED_x36.avif 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/avif\"\n            }}></source><source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/a0b58/Node-RED_x36.webp 230w\", \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/bc10c/Node-RED_x36.webp 460w\", \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/87ca7/Node-RED_x36.webp 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/webp\"\n            }}></source>{`\n          `}<source parentName=\"picture\" {...{\n              \"srcSet\": [\"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/81c8e/Node-RED_x36.png 230w\", \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/08a84/Node-RED_x36.png 460w\", \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/e9beb/Node-RED_x36.png 730w\"],\n              \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n              \"type\": \"image/png\"\n            }}></source>{`\n          `}<img parentName=\"picture\" {...{\n              \"className\": \"gatsby-resp-image-image\",\n              \"src\": \"/en/static/e4c38b2d99f92f67f5799bb4aa9a9b7c/e9beb/Node-RED_x36.png\",\n              \"alt\": \"Node-RED and INSTAR IP Cameras\",\n              \"title\": \"Node-RED and INSTAR IP Cameras\",\n              \"loading\": \"lazy\",\n              \"decoding\": \"async\",\n              \"style\": {\n                \"width\": \"100%\",\n                \"height\": \"100%\",\n                \"margin\": \"0\",\n                \"verticalAlign\": \"middle\",\n                \"position\": \"absolute\",\n                \"top\": \"0\",\n                \"left\": \"0\"\n              }\n            }}></img>{`\n        `}</picture>{`\n  `}</a>{`\n    `}</span></p>\n    <EuiSpacer mdxType=\"EuiSpacer\" />\n    <ForumBox mdxType=\"ForumBox\" />\n\n    </MDXLayout>;\n}\n;\nMDXContent.isMDXComponent = true;\n      "],"names":["_frontmatter","layoutProps","MDXLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","Object","assign","mdxType","SEOHelmet","title","dateChanged","author","tag","description","image","twitter","location","pathname","BreadCrumbs","locationBC","locationEN","locationDE","locationFR","crumbLabel","NavButtons","PrimaryBoxInfo","EuiSpacer","parentName","ForumBox","isMDXComponent"],"sourceRoot":""}