// ⚡️ Fiber is an Express inspired web framework written in Go with ☕️
// 🤖 Github Repository: https://github.com/gofiber/fiber
// 📌 API Documentation: https://docs.gofiber.io

package utils

import (
	
	
	
	
	
	
	
	
	
	
	
	
	

	googleuuid 
)

const (
	toLowerTable = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
	toUpperTable = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\u007f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
)

// Copyright © 2014, Roger Peppe
// github.com/rogpeppe/fastuuid
// All rights reserved.

const (
	emptyUUID = "00000000-0000-0000-0000-000000000000"
)

var (
	uuidSeed    [24]byte
	uuidCounter uint64
	uuidSetup   sync.Once
	unitsSlice  = []byte("kmgtp")
)

// UUID generates an universally unique identifier (UUID)
func () string {
	// Setup seed & counter once
	uuidSetup.Do(func() {
		if ,  := rand.Read(uuidSeed[:]);  != nil {
			return
		}
		uuidCounter = binary.LittleEndian.Uint64(uuidSeed[:8])
	})
	if atomic.LoadUint64(&uuidCounter) <= 0 {
		return emptyUUID
	}
	// first 8 bytes differ, taking a slice of the first 16 bytes
	 := atomic.AddUint64(&uuidCounter, 1)
	 := uuidSeed
	binary.LittleEndian.PutUint64([:8], )
	[6], [9] = [9], [6]

	// RFC4122 v4
	[6] = ([6] & 0x0f) | 0x40
	[8] = [8]&0x3f | 0x80

	// create UUID representation of the first 128 bits
	 := make([]byte, 36)
	hex.Encode([0:8], [0:4])
	[8] = '-'
	hex.Encode([9:13], [4:6])
	[13] = '-'
	hex.Encode([14:18], [6:8])
	[18] = '-'
	hex.Encode([19:23], [8:10])
	[23] = '-'
	hex.Encode([24:], [10:16])

	return UnsafeString()
}

// UUIDv4 returns a Random (Version 4) UUID.
// The strength of the UUIDs is based on the strength of the crypto/rand package.
func () string {
	,  := googleuuid.NewRandom()
	if  != nil {
		return UUID()
	}
	return .String()
}

// FunctionName returns function name
func ( interface{}) string {
	 := reflect.ValueOf().Type()
	if .Kind() == reflect.Func {
		return runtime.FuncForPC(reflect.ValueOf().Pointer()).Name()
	}
	return .String()
}

// GetArgument check if key is in arguments
func ( string) bool {
	for  := range os.Args[1:] {
		if os.Args[1:][] ==  {
			return true
		}
	}
	return false
}

// IncrementIPRange Find available next IP address
func ( net.IP) {
	for  := len() - 1;  >= 0; -- {
		[]++
		if [] > 0 {
			break
		}
	}
}

// ConvertToBytes returns integer size of bytes from human-readable string, ex. 42kb, 42M
// Returns 0 if string is unrecognized
func ( string) int {
	 := len()
	if  == 0 {
		return 0
	}
	var ,  int
	// loop the string
	for  :=  - 1;  >= 0; -- {
		// check if the char is a number
		if unicode.IsDigit(rune([])) {
			 = 
			break
		} else if [] != ' ' {
			 = 
		}
	}

	if  < 0 {
		return 0
	}
	// fetch the number part and parse it to float
	,  := strconv.ParseFloat([:+1], 64)
	if  != nil {
		return 0
	}

	// check the multiplier from the string and use it
	if  > 0 {
		// convert multiplier char to lowercase and check if exists in units slice
		 := bytes.IndexByte(unitsSlice, toLowerTable[[]])
		if  != -1 {
			const  = 1000
			 *= math.Pow(, float64(+1))
		}
	}

	return int()
}