function map5d( arr, fcn, thisArg ) {
	var out;
	var t1;
	var t2;
	var t3;
	var t4;
	var a1;
	var a2;
	var a3;
	var a4;
	var S0;
	var S1;
	var S2;
	var S3;
	var S4;
	var i0;
	var i1;
	var i2;
	var i3;
	var i4;

	if ( !isArrayLikeObject( arr ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be an array-like object. Value: `%s`.', arr ) );
	}
	if ( !isFunction( fcn ) ) {
		throw new TypeError( format( 'invalid argument. Second argument must be a function. Value: `%s`.', fcn ) );
	}
	S0 = arr.length;
	out = [];
	for ( i0 = 0; i0 < S0; i0++ ) {
		a1 = arr[ i0 ];
		if ( !isArrayLikeObject( a1 ) ) { // note: cannot support the more general "collections" here (which includes typed arrays having more than 2^32-1 elements), as the output array is limited to 2^32-1 elements; thus, we opt for the lowest common denominator: generic arrays
			throw new TypeError( format( 'invalid argument. First argument must be a five-dimensional nested array. Index: `%u`. Value: `%s`.', i0, a1 ) );
		}
		S1 = a1.length;
		t1 = [];
		for ( i1 = 0; i1 < S1; i1++ ) {
			a2 = a1[ i1 ];
			if ( !isArrayLikeObject( a2 ) ) {
				throw new TypeError( format( 'invalid argument. First argument must be a five-dimensional nested array. Indices: (%u, %u). Value: `%s`.', i0, i1, a2 ) );
			}
			S2 = a2.length;
			t2 = [];
			for ( i2 = 0; i2 < S2; i2++ ) {
				a3 = a2[ i2 ];
				if ( !isArrayLikeObject( a3 ) ) {
					throw new TypeError( format( 'invalid argument. First argument must be a five-dimensional nested array. Indices: (%u, %u, %u). Value: `%s`.', i0, i1, i2, a3 ) );
				}
				S3 = a3.length;
				t3 = [];
				for ( i3 = 0; i3 < S3; i3++ ) {
					a4 = a3[ i3 ];
					if ( !isArrayLikeObject( a4 ) ) {
						throw new TypeError( format( 'invalid argument. First argument must be a five-dimensional nested array. Indices: (%u, %u, %u, %u). Value: `%s`.', i0, i1, i2, i3, a4 ) );
					}
					S4 = a4.length;
					t4 = [];
					for ( i4 = 0; i4 < S4; i4++ ) {
						t4.push( fcn.call( thisArg, a4[ i4 ], [ i0, i1, i2, i3, i4 ], arr ) ); // eslint-disable-line max-len
					}
					t3.push( t4 );
				}
				t2.push( t3 );
			}
			t1.push( t2 );
		}
		out.push( t1 );
	}
	return out;
}
Applies a function to each nested element in a five-dimensional nested array and assigns the result to a nested element in a new five-dimensional nested array.

## Notes

-   The applied function is provided the following arguments:

    -   **value**: array element.
    -   **indices**: current array element indices.
    -   **arr**: input array.

@param {ArrayLikeObject<ArrayLikeObject>} arr - five-dimensional nested array
@param {Function} fcn - function to apply
@param {*} [thisArg] - function execution context
@throws {TypeError} first argument must be a five-dimensional nested array
@throws {TypeError} second argument must be a function
@returns {ArrayArray} five-dimensional nested array

@example
var naryFunction = require( '@stdlib/utils/nary-function' );
var abs = require( '@stdlib/math/base/special/abs' );

var arr = [
    [ [ [ [ -1, -2, -3 ] ] ] ],
    [ [ [ [ -4, -5, -6 ] ] ] ]
];

var out = map5d( arr, naryFunction( abs, 1 ) );
// returns [ [ [ [ [ 1, 2, 3 ] ] ] ], [ [ [ [ 4, 5, 6 ] ] ] ] ]