Browse Source

firmware-utils: replace GPL 2.0 boilerplate/reference with SPDX

This uses "GPL-2.0-only" header for files identified using scancode
license scanner with 100% score as GPL 2.0.

Signed-off-by: Rafał Miłecki <[email protected]>
Reviewed-by: Linus Walleij <[email protected]>
Acked-by: Stijn Tintel <[email protected]>
Rafał Miłecki 4 years ago
parent
commit
f705008d7e
37 changed files with 36 additions and 218 deletions
  1. 1 13
      tools/firmware-utils/src/add_header.c
  2. 1 5
      tools/firmware-utils/src/buffalo-enc.c
  3. 1 5
      tools/firmware-utils/src/buffalo-lib.c
  4. 1 5
      tools/firmware-utils/src/buffalo-lib.h
  5. 1 5
      tools/firmware-utils/src/buffalo-tag.c
  6. 1 5
      tools/firmware-utils/src/buffalo-tftp.c
  7. 1 1
      tools/firmware-utils/src/dns313-header.c
  8. 1 5
      tools/firmware-utils/src/edimax_fw_header.c
  9. 1 5
      tools/firmware-utils/src/fix-u-media-header.c
  10. 1 13
      tools/firmware-utils/src/mkbrncmdline.c
  11. 1 13
      tools/firmware-utils/src/mkbrnimg.c
  12. 1 5
      tools/firmware-utils/src/mkbuffaloimg.c
  13. 1 5
      tools/firmware-utils/src/mkcameofw.c
  14. 1 5
      tools/firmware-utils/src/mkcasfw.c
  15. 1 4
      tools/firmware-utils/src/mkdapimg2.c
  16. 1 5
      tools/firmware-utils/src/mkdhpimg.c
  17. 1 5
      tools/firmware-utils/src/mkdniimg.c
  18. 1 13
      tools/firmware-utils/src/mkhilinkfw.c
  19. 1 5
      tools/firmware-utils/src/mkmerakifw.c
  20. 1 5
      tools/firmware-utils/src/mkplanexfw.c
  21. 1 5
      tools/firmware-utils/src/mkporayfw.c
  22. 1 5
      tools/firmware-utils/src/mkrasimage.c
  23. 1 5
      tools/firmware-utils/src/mkrtn56uimg.c
  24. 1 5
      tools/firmware-utils/src/mksenaofw.c
  25. 1 5
      tools/firmware-utils/src/mktplinkfw-lib.c
  26. 1 5
      tools/firmware-utils/src/mktplinkfw-lib.h
  27. 1 5
      tools/firmware-utils/src/mktplinkfw.c
  28. 1 5
      tools/firmware-utils/src/mktplinkfw2.c
  29. 1 5
      tools/firmware-utils/src/mkwrggimg.c
  30. 1 5
      tools/firmware-utils/src/mkwrgimg.c
  31. 1 5
      tools/firmware-utils/src/mkzcfw.c
  32. 1 9
      tools/firmware-utils/src/mkzynfw.c
  33. 1 4
      tools/firmware-utils/src/pc1crypt.c
  34. 1 9
      tools/firmware-utils/src/uimage_padhdr.c
  35. 1 5
      tools/firmware-utils/src/zyimage.c
  36. 1 5
      tools/firmware-utils/src/zynos.h
  37. 0 4
      tools/firmware-utils/src/zytrx.c

+ 1 - 13
tools/firmware-utils/src/add_header.c

@@ -1,21 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * add_header.c - partially based on OpenWrt's motorola-bin.c
  *
  * Copyright (C) 2008 Imre Kaloz  <[email protected]>
  *                    Gabor Juhos <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License,
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
 /*

+ 1 - 5
tools/firmware-utils/src/buffalo-enc.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2009-2011 Gabor Juhos <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/buffalo-lib.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2009-2011 Gabor Juhos <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/buffalo-lib.h

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2009-2011 Gabor Juhos <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #ifndef _BUFFALO_LIB_H

+ 1 - 5
tools/firmware-utils/src/buffalo-tag.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2009-2011 Gabor Juhos <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/buffalo-tftp.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2009-2011 Gabor Juhos <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 1
tools/firmware-utils/src/dns313-header.c

@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * dns313-header.c
  *
@@ -8,7 +9,6 @@
  * The DNS313 use the same header on zImage, ramdisk, rootfs.
  *
  * Written by Linus Walleij <[email protected]>
- * License terms: GPLv2
  */
 #include <stdlib.h>
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/edimax_fw_header.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2014 Gabor Juhos <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/fix-u-media-header.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2012 Gabor Juhos <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 #include <stdio.h>
 #include <stdlib.h>

+ 1 - 13
tools/firmware-utils/src/mkbrncmdline.c

@@ -1,20 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * mkbrncmdline.c - partially based on OpenWrt's wndr3700.c
  *
  * Copyright (C) 2011 Tobias Diedrich <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License,
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
 #include <stdio.h>

+ 1 - 13
tools/firmware-utils/src/mkbrnimg.c

@@ -1,20 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * mkbrnimg.c - partially based on OpenWrt's wndr3700.c
  *
  * Copyright (C) 2011 Tobias Diedrich <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License,
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkbuffaloimg.c

@@ -1,13 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2009 Gabor Juhos <[email protected]>
  *  Copyright (C) 2016 FUKAUMI Naoki <[email protected]>
  *
  *  Based on mkdniimg.c
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkcameofw.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2012 Gabor Juhos <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkcasfw.c

@@ -1,12 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *
  *  Copyright (C) 2007 OpenWrt.org
  *  Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 4
tools/firmware-utils/src/mkdapimg2.c

@@ -1,8 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License,
- * version 2 as published by the Free Software Foundation.
- *
  * (C) Nicolò Veronese <[email protected]>
  */
 

+ 1 - 5
tools/firmware-utils/src/mkdhpimg.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2016 FUKAUMI Naoki <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <sys/stat.h>

+ 1 - 5
tools/firmware-utils/src/mkdniimg.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2009 Gabor Juhos <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 13
tools/firmware-utils/src/mkhilinkfw.c

@@ -1,19 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2013 Jeff Kent <[email protected]>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
  * This tool encrypts and decrypts uImage formatted firmware for Hilink
  * HLK-RM04 wireless modules.  It will also truncate a dump of mtd6 and make
  * it an image suitable for flashing via the stock firmware upgrade page.

+ 1 - 5
tools/firmware-utils/src/mkmerakifw.c

@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2015 Thomas Hebb <[email protected]>
  *
@@ -6,11 +7,6 @@
  * same purpose. I have created this reimplementation at his request. The
  * original script can be found at:
  * <https://github.com/riptidewave93/meraki-partbuilder>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkplanexfw.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2009 Gabor Juhos <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkporayfw.c

@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Builder/viewer/extractor utility for Poray firmware image files
  *
@@ -12,11 +13,6 @@
  * Itself based on:
  *   TP-Link WR941 V2 firmware checksum fixing tool.
  *   Copyright (C) 2008,2009 Wang Jian <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkrasimage.c

@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * --- ZyXEL header format ---
  * Original Version by Benjamin Berg <[email protected]>
@@ -29,11 +30,6 @@
  *
  * The checksum for the header is calculated over the first 2048 bytes with
  * the rootfs image checksum as the placeholder during calculation.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 #include <fcntl.h>
 #include <getopt.h>

+ 1 - 5
tools/firmware-utils/src/mkrtn56uimg.c

@@ -1,12 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *
  *  Copyright (C) 2014 OpenWrt.org
  *  Copyright (C) 2014 Mikko Hissa <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <errno.h>

+ 1 - 5
tools/firmware-utils/src/mksenaofw.c

@@ -1,12 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *
  *  Copyright (C) 2012 OpenWrt.org
  *  Copyright (C) 2012 Mikko Hissa <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mktplinkfw-lib.c

@@ -1,14 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2009 Gabor Juhos <[email protected]>
  *
  * This tool was based on:
  *   TP-Link WR941 V2 firmware checksum fixing tool.
  *   Copyright (C) 2008,2009 Wang Jian <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mktplinkfw-lib.h

@@ -1,14 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2009 Gabor Juhos <[email protected]>
  *
  * This tool was based on:
  *   TP-Link WR941 V2 firmware checksum fixing tool.
  *   Copyright (C) 2008,2009 Wang Jian <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 

+ 1 - 5
tools/firmware-utils/src/mktplinkfw.c

@@ -1,14 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2009 Gabor Juhos <[email protected]>
  *
  * This tool was based on:
  *   TP-Link WR941 V2 firmware checksum fixing tool.
  *   Copyright (C) 2008,2009 Wang Jian <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mktplinkfw2.c

@@ -1,14 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2009 Gabor Juhos <[email protected]>
  *
  * This tool was based on:
  *   TP-Link WR941 V2 firmware checksum fixing tool.
  *   Copyright (C) 2008,2009 Wang Jian <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkwrggimg.c

@@ -1,11 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2011 Gabor Juhos <[email protected]>
  *  Copyright (C) 2016 Stijn Tintel <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #define _ANSI_SOURCE

+ 1 - 5
tools/firmware-utils/src/mkwrgimg.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2011 Gabor Juhos <[email protected]>
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/mkzcfw.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2010 Gabor Juhos <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 9
tools/firmware-utils/src/mkzynfw.c

@@ -1,16 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *
  *  Copyright (C) 2007-2008 OpenWrt.org
  *  Copyright (C) 2007-2008 Gabor Juhos <juhosg at openwrt.org>
- *
- *  This code was based on the information of the ZyXEL's firmware
- *  image format written by Kolja Waschk, can be found at:
- *  http://www.ixo.de/info/zyxel_uclinux
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 4
tools/firmware-utils/src/pc1crypt.c

@@ -1,10 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  Copyright (C) 2009 Gabor Juhos <[email protected]>
  *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  *  This code was based on:
  *	PC1 Cipher Algorithm ( Pukall Cipher 1 )
  *	By Alexander PUKALL 1991

+ 1 - 9
tools/firmware-utils/src/uimage_padhdr.c

@@ -1,16 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * uimage_padhdr.c : add zero paddings after the tail of uimage header
  *
  * Copyright (C) 2019 NOGUCHI Hiroshi <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License,
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/zyimage.c

@@ -1,10 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2014 Soul Trace <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
  */
 
 #include <stdio.h>

+ 1 - 5
tools/firmware-utils/src/zynos.h

@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *
  *  Copyright (C) 2007-2008 OpenWrt.org
@@ -6,11 +7,6 @@
  *  This code was based on the information of the ZyXEL's firmware
  *  image format written by Kolja Waschk, can be found at:
  *  http://www.ixo.de/info/zyxel_uclinux
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License version 2 as published
- *  by the Free Software Foundation.
- *
  */
 
 #ifndef _ZYNOS_H

+ 0 - 4
tools/firmware-utils/src/zytrx.c

@@ -8,10 +8,6 @@
  * Copyright (C) 2008 Imre Kaloz  <[email protected]>
  *                    Gabor Juhos <[email protected]>
  * Copyright (C) 2021 Bjørn Mork <[email protected]>
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License,
- * version 2 as published by the Free Software Foundation.
  */
 
 #include <stdio.h>