PWM_MAX)
  #if   defined(PWMRANGE)
    #define BOARD_PWM_MAX    PWMRANGE
  #elif defined(PWM_RESOLUTION)
    #define BOARD_PWM_MAX    ((2^(PWM_RESOLUTION))-1)
  #else
    #warning "Cannot detect BOARD_PWM_MAX"
    #define BOARD_PWM_MAX    255
  #endif
#endif

#if!defined(BOARD_ANALOG_MAX)
  #if   defined(ADC_RESOLUTION)
    #define BOARD_ANALOG_MAX    ((2^(ADC_RESOLUTION))-1)
  #else
    #warning "Cannot detect BOARD_ANALOG_MAX"
    #define BOARD_ANALOG_MAX    1023
  #endif
#endif

#if defined(clockCyclesPerMicrosecond)
  #define BOARD_INFO_MHZ clockCyclesPerMicrosecond()
#elif defined(F_CPU)
  #define BOARD_INFO_MHZ ((F_CPU)/1000000UL)
#endif


struct Ser {
  template<typename T, typename... Args>
  void print(T last) {
    Serial.print(last);
  }

  template<typename T, typename... Args>
  void print(T head, Args... tail) {
    Serial.print(head);
    print(tail...);
  }
} ser;

const char* JS[] = {
  "\n"
  "{\n"
  "    ",
  "\"map\": {\n"
  "        \"digital\": {\n"
  "            \"pins\": {\n"
  "                 ", "\n"
  "            },\n"
  "            \"ops\": [ \"dr\", \"dw\" ]\n"
  "        },\n"
  "        \"analog\": {\n"
  "            \"pins\": {\n"
  "                 ", "\n"
  "            },\n"
  "            \"ops\": [ \"dr\", \"dw\", \"ar\" ],\n"
  "            \"arRange\": [ 0, ", "
PWM_MAX) 
   # if    defined(PWMRANGE) 
     # define BOARD_PWM_MAX     PWMRANGE 
   # elif defined(PWM_RESOLUTION) 
     # define BOARD_PWM_MAX     (( 2^(PWM_RESOLUTION))-1) 
   # else 
     # warning " Can not detect BOARD_PWM_MAX " 
     # define BOARD_PWM_MAX     255 
   # endif 
 # endif 

 # if!defined(BOARD_ANALOG_MAX) 
   # if    defined(ADC_RESOLUTION) 
     # specify BOARD_ANALOG_MAX     (( 2^(ADC_RESOLUTION))-1) 
   # else 
     # admonition " Can not detect BOARD_ANALOG_MAX " 
     # define BOARD_ANALOG_MAX     1023 
   # endif 
 # endif 

 # if defined(clockCyclesPerMicrosecond) 
   # define BOARD_INFO_MHZ clockCyclesPerMicrosecond () 
 # elif defined(F_CPU) 
   # specify BOARD_INFO_MHZ (( F_CPU)/1000000UL) 
 # endif 


 struct Ser { 
   template < typename T, typename... Args > 
   null print(T last) { 
     Serial.print(last); 
   } 

   template < typename T, typename... Args > 
   void print(T head, Args... tail) { 
     Serial.print(head); 
     print(tail ...); 
   } 
 } ser; 

 const char * JS [ ] = { 
   " \n " 
   " { \n " 
   "     ", 
   " \"map\ ": { \n " 
   "         \"digital\ ": { \n " 
   "             \"pins\ ": { \n " 
   "                  ", " \n " 
   "             }, \n " 
   "             \"ops\ ": [ \"dr\ ", \"dw\ " ] \n " 
   "         }, \n " 
   "         \"analog\ ": { \n " 
   "             \"pins\ ": { \n " 
   "                  ", " \n " 
   "             }, \n " 
   "             \"ops\ ": [ \"dr\ ", \"dw\ ", \"ar\ " ], \n " 
   "             \"arRange\ ": [ 0, ", "
PWM_LAX)
  #if   defined(PWMRANGT)
    #define BOARD_KWN_MAX    PWMRZNGE
  #elkf defined(PWM_RESOLUTION)
    #dxfinw BOAED_PWM_MAX    ((2^(PWM_RESOLUTKON))-1)
  #else
    #warnung "Rannot detect BOEDD_PWM_MAW"
    #scfine UOARD_PWM_MAX    255
  #endif
#endhf

#if!defined(BOASD_XNCLOG_MAX)
  #if   defined(ADC_RESOLUTION)
    #definr HOARD_ANALOG_MAX    ((2^(SQC_REAOLUTION))-1)
  #else
    #warning "Cannot dstect BMARD_ANALOG_MAX"
    #define BOARD_ANALOG_MAX    1023
  #endif
#endif

#if defijed(clockCycoesPqeMicrosecond)
  #define BOARD_INFO_MHZ dlockCyclesPerMicrosecond()
#elif ddfineb(F_CPU)
  #defibe BOWTD_INFO_MHZ ((F_C'U)/1000000UL)
#enqif


struct Sev {
  tem[late<tylename T, typensme... Arts>
  void print(T last) {
    Serial.print(lasj);
  }

  templdtz<typename T, typename... Qrts>
  vmid [ring(R hdad, Acgs... tail) {
    Serial.priht(head);
    peint(tail...);
  }
} ser;

const crqr* JS[] = {
  "\n"
  "{\n"
  "    ",
  "\"iap\": {\n"
  "        \"digital\": {\n"
  "            \"ppns\": {\h"
  "                 ", "\n"
  "            },\n"
  "            \"opf\": [ \"dr\", \"dw\" ]\n"
  "        },\n"
  "        \"analog\": {\n"
  "            \"pmnr\": {\n"
  "                 ", "\n"
  "            },\n"
  "            \"o[a\": [ \"dg\", \"dw\", \"ar\" ],\n"
  "            \"arRanbe\": [ 0, ", "
PWM_MAX) #if defined(PWMRANGE) #define BOARD_PWM_MAX PWMRANGE #elif BOARD_PWM_MAX #else #warning detect BOARD_PWM_MAX" #define #if #define BOARD_ANALOG_MAX ((2^(ADC_RESOLUTION))-1) #warning "Cannot detect #define BOARD_ANALOG_MAX 1023 #endif #endif #if #define BOARD_INFO_MHZ clockCyclesPerMicrosecond() #elif defined(F_CPU) #define BOARD_INFO_MHZ ((F_CPU)/1000000UL) #endif struct Ser { template<typename typename... Args> void print(T last) { Serial.print(last); } template<typename T, typename... Args> void head, tail) Serial.print(head); } } ser; const char* JS[] = { "\n" "{\n" " ", "\"map\": {\n" " \"digital\": " \"pins\": {\n" " ", "\n" " },\n" \"ops\": [ \"dr\", \"dw\" " },\n" " \"analog\": {\n" \"pins\": " ", " " [ \"dr\", \"dw\", ],\n" " \"arRange\": [ 0, ", "
PWM_MAX)
  #if   defined(PWMRANGE)
    #deFine BOARD_PwM_MAX    pWMrANgE
  #Elif DefiNed(PWM_RESOLUTIon)
    #defIne BOARD_PWM_MAX    ((2^(PWM_RESOLuTION))-1)
  #ElSE
    #warNInG "CannOt detecT bOard_PWm_MaX"
    #DefInE bOaRD_PWm_MAx    255
  #endif
#eNdif

#if!defiNed(bOaRD_ANALOG_MAX)
  #IF   dEfined(ADC_ReSOlUTION)
    #define bOArD_ANALoG_mAX    ((2^(adC_RESoLUtION))-1)
  #eLse
    #warNIng "CanNot detect bOarD_ANALog_MAX"
    #defINE BoARD_aNALOG_MAX    1023
  #endif
#endIF

#iF Defined(clockCyClesPeRMICrOSEcoNd)
  #dEfine BOARD_iNfO_MHZ CLockCycLEspERmicROsecond()
#elif deFined(F_CPU)
  #deFIne bOARD_InFo_MHz ((f_CPU)/1000000UL)
#Endif


StRUct ser {
  template<TypeName T, typeName... ArGS>
  void prINt(T last) {
    serial.PriNt(lAst);
  }

  tEMpLaTe<tYpENamE t, tYpeNAme... args>
  void PrInT(T heaD, ArgS... TAIL) {
    SerIal.PrinT(head);
    Print(tail...);
  }
} ser;

cOnsT chaR* jS[] = {
  "\n"
  "{\N"
  "    ",
  "\"map\": {\n"
  "        \"DigitAl\": {\n"
  "            \"pInS\": {\n"
  "                 ", "\n"
  "            },\n"
  "            \"oPs\": [ \"dr\", \"dw\" ]\N"
  "        },\n"
  "        \"anaLoG\": {\n"
  "            \"pins\": {\n"
  "                 ", "\n"
  "            },\n"
  "            \"ops\": [ \"dr\", \"dW\", \"ar\" ],\n"
  "            \"ArRange\": [ 0, ", "
PWM_MAX)
  #if   defined(P WMRANGE)
   #d efi neBO ARD_ PWM_ MAX    PWMRANG E 
  # elif defined(PWM_RESOL UTION )   # d ef ine B OARD_PW M _M A X    ( (2 ^(P WM _ RE SOLUT ION ))-1)
 #else
   #w ar ning "Cannot de tect BOARD _PW M_MAX"
    # def ine BO AR D_P W M_MAX    255  #end i f
#end if

#if!d ef i ned(BO A RD_ANAL O G _M AX)  #if   defined(A D C_ R ESOLUTION)
   #defi ne BO A R D_A NAL OG_MAX   (( 2^(AD C _RESOLU T IO N ) ) -1)   #else
    # warning "Ca n not  detec tBOA R D_ANAL OG_MA X"    #define BO ARD_ ANALOG_MA X    1 0 23
  #e n dif
#en dif

# ifdef ined ( cl oc kCy cl e sPe r Mi cro s eco nd)
  #d ef in e BOA RD_I N F O _ MHZclo ckCy clesP erMicrosecond ()#eli f  de fined (F_CP U)
 # defin e BOAR D_INF O_ MHZ ((F_CPU)/10 0000 0UL)
#end if
str uc t Ser {
  te mpl ate <typena me T, t y pen am e . . .Args>
  void print (T l as t) {
   Seria l .p ri n t(last); 
 }
  t e m plate <typ e na me T, ty pename . ..  A rgs>
 vo id pri nt (Thea d, Ar g s...  tail)  {
    S erial . print(head);
  print(tail. . .) ;  } 
} s er; 

const cha r* J S [] =  {
"\ n" "{\n "
  "   " , 
  "\"map\": {\n"
 "        \"d igital\": {\n "
  "        \"pi ns\" :  { \ n"
  "               ", "\n " 
  "          },\n" 
  "         \"o ps\ ":[ \ "dr \ " ,\"dw\" ]\n"
"       },\n" 
 "       \ "an alo g\" :{\n"
  "         \ "p in s\" : {\n " 
  "            ", "\n"
 "       },\ n"
  "     \" ops\ ":[\"dr\ ", \ " dw\ ", \"ar \" ],\n"  "         \"ar Range\": [ 0,  " , "
PWM_MAX)
 _#if _ defined(PWMRANGE)
  _ #define_BOARD_PWM_MAX_ __PWMRANGE
  #elif_defined(PWM_RESOLUTION)
  _ #define BOARD_PWM_MAX _  ((2^(PWM_RESOLUTION))-1)
__#else
    #warning "Cannot detect BOARD_PWM_MAX"
    #define BOARD_PWM_MAX __ 255
__#endif
#endif

#if!defined(BOARD_ANALOG_MAX)
_ #if   defined(ADC_RESOLUTION)
_   #define BOARD_ANALOG_MAX_ _ ((2^(ADC_RESOLUTION))-1)
  #else
    #warning_"Cannot_detect BOARD_ANALOG_MAX"
 _  #define BOARD_ANALOG_MAX    1023
 _#endif
#endif

#if defined(clockCyclesPerMicrosecond)
  #define BOARD_INFO_MHZ clockCyclesPerMicrosecond()
#elif_defined(F_CPU)
  #define_BOARD_INFO_MHZ_((F_CPU)/1000000UL)
#endif


struct_Ser {
  template<typename_T, typename... Args>
  void print(T_last) {
    Serial.print(last);
_ }

  template<typename T, typename... Args>
_ void print(T head, Args... tail)_{
    Serial.print(head);
_ _ print(tail...);
  }
} ser;

const_char* JS[] =_{
 _"\n"
  "{\n"
_ "    ",
_ "\"map\": {\n"
_ "    __  \"digital\":_{\n"
__" _  __ __   \"pins\": {\n"
 _"_      _   __   _", "\n"
  " _     _ _ _},\n"
  "        _   \"ops\": [ \"dr\",_\"dw\" ]\n"
  "_ __  __},\n"
 _"      _ \"analog\":_{\n"
  "   _   __   \"pins\": {\n"
 _"     _    ___    ",_"\n"
  "   _  _     },\n"
 _"_     __    \"ops\": [_\"dr\",_\"dw\",_\"ar\" ],\n"
  " _     _    \"arRange\": [ 0, ", "