text:
using System;
using System.Collections.Generic;

namespace Microsoft.Xna.Framework
{
    /// <summary>
    /// Bounding volume using an oriented bounding box.
    /// </summary>
    public struct BoundingOrientedBox : IEquatable<BoundingOrientedBox>
    {
        #region Constants
        public const int CornerCount = 8;

        // Epsilon value used in ray tests, where a ray might hit the box almost edge-on.
        const float RAY_EPSILON = 1e-20F;
        #endregion

        #region Fields
        public Vector3 Center;
        public Vector3 HalfExtent;
        public Quaternion Orientation;
        #endregion

        #region Constructors

        /// <summary>
        /// Create an oriented box with the given center, half-extents, and orientation.
        /// </summary>
        public BoundingOrientedBox(Vector3 center, Vector3 halfExtents, Quaternion orientation)
        {
            Center = center;
            HalfExtent = halfExtents;
            Orientation = orientation;
        }

        /// <summary>
        /// Create an oriented box from an axis-aligned box.
        /// </summary>
        public static BoundingOrientedBox CreateFromBoundingBox(BoundingBox box)
        {
            Vector3 mid = (box.Min + box.Max) * 0.5f;
            Vector3 halfExtent = (box.Max - box.Min) * 0.5f;
            return new BoundingOrientedBox(mid, halfExtent, Quaternion.Identity);
        }

        /// <summary>
        /// Transform the given bounding box by a rotation around the origin followed by a translation
        /// </summary>
        /// <param name="rotation"></param>
        /// <param name="translation"></param>
        /// <returns>A new bounding box, transformed relative to this one</returns>
        public BoundingOrientedBox Transform(Quaternion rotation, Vector3 translation)
        {
            return new BoundingOrientedBox(Vector3.Transform(Center, rotation) + translation,
                                            HalfExtent,
                                            Orientation * rotation);
        }

        /// <summary>
        /// Transform the given bounding box by a uniform scale and rotation around the origin followed
        /// by a translation
        /// </summary>
        /// <returns>A new bounding box, transformed relative to this one</returns>
        public BoundingOrientedBox Transform(float scale, Quaternion rotation, Vector3 translation)
        {
            return new BoundingOrientedBox(Vector3.Transform(Center * scale, rotation) + translation,
                                            HalfExtent * scale,
                                            Orientation * rotation);
        }

        #endregion

        #region IEquatable implementation

        public bool Equals(BoundingOrientedBox other)
        {
            return (Center == other.Center && HalfExtent == other.HalfExtent && Orientation == other.Orientation);
        }

        public override bool Equals(Object obj)
        {
            if (obj != null && obj is BoundingOrientedBox)
            {
                BoundingOrientedBox other = (BoundingOrientedBox)obj;
                return (Center == other.Center && HalfExtent == other.HalfExtent && Orientation == other.Orientation);
            }
            else
            {
                return false;
            }
        }

        public override int GetHashCode()
        {
            return Center.GetHashCode() ^ HalfExtent.GetHashCode() ^ Orientation.GetHashCode();
        }

        public static bool operator==(BoundingOrientedBox a, BoundingOrientedBox b)
        {
            return Equals(a, b);
        }

        public static bool operator!=(BoundingOrientedBox a, BoundingOrientedBox b)
        {
            return !Equals(a, b);
        }

        public override string ToString()
        {
            return "{Center:" + Center.ToString() +
                   " Extents:" + HalfExtent.ToString() +
                   " Orientation:" + Orientation.ToString() + "}";
        }

        #endregion

        #region Test vs. BoundingBox

        /// <summary>
        /// Determine if box A intersects box B.
        /// </summary>
        public bool Intersects(ref BoundingBox box)
        {
            Vector3 boxCenter = (box.Max + box.Min) * 0.5f;
            Vector3 boxHalfExtent = (box.Max - box.Min) * 0.5f;

            Matrix mb = Matrix.CreateFromQuaternion(Orientation);
            mb.Translation = Center - boxCenter;

            return ContainsRelativeBox(ref boxHalfExtent, ref HalfExtent, ref mb) != ContainmentType.Disjoint;
        }

        /// <summary>
        /// Determine if this box contains, intersects, or is disjoint from the given BoundingBox.
        /// </summary>
        public ContainmentType Contains(ref BoundingBox box)
        {
            Vector3 boxCenter = (box.Max + box.Min) * 0.5f;
            Vector3 boxHalfExtent = (box.Max - box.Min) * 0.5f;

            // Build the 3x3 rotation matrix that defines the orientation of 'other' relative to this box
            Quaternion relOrient;
            Quaternion.Conjugate(ref Orientation, out relOrient);

            Matrix relTransform = Matrix.CreateFromQuaternion(relOrient);
            relTransform.Translation = Vector3.TransformNormal(boxCenter - Center, relTransform);

            return ContainsRelativeBox(ref HalfExtent, ref boxHalfExtent, ref relTransform);
        }

        /// <summary>
        /// Determine if box A contains, intersects, or is disjoint from box B.
        /// </summary>
        public static ContainmentType Contains(ref BoundingBox boxA, ref BoundingOrientedBox oboxB)
        {
            Vector3 boxA_halfExtent = (boxA.Max - boxA.Min) * 0.5f;
            Vector3 boxA_center = (boxA.Max + boxA.Min) * 0.5f;
            Matrix mb = Matrix.CreateFromQuaternion(oboxB.Orientation);
            mb.Translation = oboxB.Center - boxA_center;

            return BoundingOrientedBox.ContainsRelativeBox(ref boxA_halfExtent, ref oboxB.HalfExtent, ref mb);
        }

        #endregion

        #region Test vs. BoundingOrientedBox

        /// <summary>
        /// Returns true if this box intersects the given other box.
        /// </summary>
        public bool Intersects(ref BoundingOrientedBox other)
        {
            return Contains(ref other) != ContainmentType.Disjoint;
        }

        /// <summary>
        /// Determine whether this box contains, intersects, or is disjoint from
        /// the given other box.
        /// </summary>
        public ContainmentType Contains(ref BoundingOrientedBox other)
        {
            // Build the 3x3 rotation matrix that defines the orientation of 'other' relative to this box
            Quaternion invOrient;
            Quaternion.Conjugate(ref Orientation, out invOrient);
            Quaternion relOrient;
            Quaternion.Multiply(ref invOrient, ref other.Orientation, out relOrient);

            Matrix relTransform = Matrix.CreateFromQuaternion(relOrient);
            relTransform.Translation = Vector3.Transform(other.Center - Center, invOrient);

            return ContainsRelativeBox(ref HalfExtent, ref other.HalfExtent, ref relTransform);
        }

        #endregion

        #region Test vs. BoundingFrustum

        /// <summary>
        /// Determine whether this box contains, intersects, or is disjoint from
        /// the given frustum.
        /// </summary>
        public ContainmentType Contains(BoundingFrustum frustum)
        {
            // Convert this bounding box to an equivalent BoundingFrustum, so we can rely on BoundingFrustum's
            // implementation. Note that this is very slow, since BoundingFrustum builds various data structures
            // for this test that it caches internally. To speed it up, you could convert the box to a frustum
            // just once and re-use that frustum for repeated tests.
            BoundingFrustum temp = ConvertToFrustum();
            return temp.Contains(frustum);
        }

        /// <summary>
        /// Returns true if this box intersects the given frustum.
        /// </summary>
        public bool Intersects(BoundingFrustum frustum)
        {
            return (Contains(frustum) != ContainmentType.Disjoint);
        }

        /// <summary>
        /// Determine whether the given frustum contains, intersects, or is disjoint from
        /// the given oriented box.
        /// </summary>
        public static ContainmentType Contains(BoundingFrustum frustum, ref BoundingOrientedBox obox)
        {
            return frustum.Contains(obox.ConvertToFrustum());
        }

        #endregion

        #region Test vs. BoundingSphere

        /// <summary>
        /// Test whether this box contains, intersects, or is disjoint from the given sphere
        /// </summary>
        public ContainmentType Contains(ref BoundingSphere sphere)
        {
            // Transform the sphere into local box space
            Quaternion iq = Quaternion.Conjugate(Orientation);
            Vector3 localCenter = Vector3.Transform(sphere.Center - Center, iq);

            // (dx,dy,dz) = signed distance of center of sphere from edge of box
            float dx = Math.Abs(localCenter.X) - HalfExtent.X;
            float dy = Math.Abs(localCenter.Y) - HalfExtent.Y;
            float dz = Math.Abs(localCenter.Z) - HalfExtent.Z;

            // Check for sphere completely inside box
            float r = sphere.Radius;
            if (dx <= -r && dy <= -r && dz <= -r)
                return ContainmentType.Contains;

            // Compute how far away the sphere is in each dimension
            dx = Math.Max(dx, 0.0f);
            dy = Math.Max(dy, 0.0f);
            dz = Math.Max(dz, 0.0f);

            if(dx*dx + dy*dy + dz*dz >= r*r)
                return ContainmentType.Disjoint;

            return ContainmentType.Intersects;
        }

        /// <summary>
        /// Test whether this box intersects the given sphere
        /// </summary>
        public bool Intersects(ref BoundingSphere sphere)
        {
            // Transform the sphere into local box space
            Quaternion iq = Quaternion.Conjugate(Orientation);
            Vector3 localCenter = Vector3.Transform(sphere.Center - Center, iq);

            // (dx,dy,dz) = signed distance of center of sphere from edge of box
            float dx = Math.Abs(localCenter.X) - HalfExtent.X;
            float dy = Math.Abs(localCenter.Y) - HalfExtent.Y;
            float dz = Math.Abs(localCenter.Z) - HalfExtent.Z;

            // Compute how far away the sphere is in each dimension
            dx = Math.Max(dx, 0.0f);
            dy = Math.Max(dy, 0.0f);
            dz = Math.Max(dz, 0.0f);
            float r = sphere.Radius;

            return dx * dx + dy * dy + dz * dz < r * r;
        }

        /// <summary>
        /// Test whether a BoundingSphere contains, intersects, or is disjoint from a BoundingOrientedBox
        /// </summary>
        public static ContainmentType Contains(ref BoundingSphere sphere, ref BoundingOrientedBox box)
        {
            // Transform the sphere into local box space
            Quaternion iq = Quaternion.Conjugate(box.Orientation);
            Vector3 localCenter = Vector3.Transform(sphere.Center - box.Center, iq);
            localCenter.X = Math.Abs(localCenter.X);
            localCenter.Y = Math.Abs(localCenter.Y);
            localCenter.Z = Math.Abs(localCenter.Z);

            // Check for box completely inside sphere
            float rSquared = sphere.Radius * sphere.Radius;
            if ((localCenter + box.HalfExtent).LengthSquared() <= rSquared)
                return ContainmentType.Contains;

            // (dx,dy,dz) = signed distance of center of sphere from edge of box
            Vector3 d = localCenter - box.HalfExtent;

            // Compute how far away the sphere is in each dimension
            d.X = Math.Max(d.X, 0.0f);
            d.Y = Math.Max(d.Y, 0.0f);
            d.Z = Math.Max(d.Z, 0.0f);

            if (d.LengthSquared() >= rSquared)
                return ContainmentType.Disjoint;

            return ContainmentType.Intersects;
        }

        #endregion

        #region Test vs. 0/1/2d primitives

        /// <summary>
        /// Returns true if this box contains the given point.
        /// </summary>
        public bool Contains(ref Vector3 point)
        {
            // Transform the point into box-local space and check against
            // our extents.
            Quaternion qinv = Quaternion.Conjugate(Orientation);
            Vector3 plocal = Vector3.Transform(point - Center, qinv);

            return Math.Abs(plocal.X) <= HalfExtent.X &&
                   Math.Abs(plocal.Y) <= HalfExtent.Y &&
                   Math.Abs(plocal.Z) <= HalfExtent.Z;
        }

        /// <summary>
        /// Determine whether the given ray intersects this box. If so, returns
        /// the parametric value of the point of first intersection; otherwise
        /// returns null.
        /// </summary>
        public float? Intersects(ref Ray ray)
        {
            Matrix R = Matrix.CreateFromQuaternion(Orientation);

            Vector3 TOrigin = Center - ray.Position;

            float t_min = -float.MaxValue;
            float t_max = float.MaxValue;

            // X-case
            float axisDotOrigin = Vector3.Dot(R.Right, TOrigin);
            float axisDotDir = Vector3.Dot(R.Right, ray.Direction);

            if (axisDotDir >= -RAY_EPSILON && axisDotDir <= RAY_EPSILON)
            {
                if ((-axisDotOrigin - HalfExtent.X) > 0.0 || (-axisDotOrigin + HalfExtent.X) > 0.0f)
                    return null;
            }
            else
            {
                float t1 = (axisDotOrigin - HalfExtent.X) / axisDotDir;
                float t2 = (axisDotOrigin + HalfExtent.X) / axisDotDir;

                if (t1 > t2)
                {
                    float temp = t1;
                    t1 = t2;
                    t2 = temp;
                }

                if (t1 > t_min)
                    t_min = t1;

                if (t2 < t_max)
                    t_max = t2;

                if (t_max < 0.0f || t_min > t_max)
                    return null;
            }

            // Y-case
            axisDotOrigin = Vector3.Dot(R.Up, TOrigin);
            axisDotDir = Vector3.Dot(R.Up, ray.Direction);

            if (axisDotDir >= -RAY_EPSILON && axisDotDir <= RAY_EPSILON)
            {
                if ((-axisDotOrigin - HalfExtent.Y) > 0.0 || (-axisDotOrigin + HalfExtent.Y) > 0.0f)
                    return null;
            }
            else
            {
                float t1 = (axisDotOrigin - HalfExtent.Y) / axisDotDir;
                float t2 = (axisDotOrigin + HalfExtent.Y) / axisDotDir;

                if (t1 > t2)
                {
                    float temp = t1;
                    t1 = t2;
                    t2 = temp;
                }

                if (t1 > t_min)
                    t_min = t1;

                if (t2 < t_max)
                    t_max = t2;

                if (t_max < 0.0f || t_min > t_max)
                    return null;
            }

            // Z-case
            axisDotOrigin = Vector3.Dot(R.Forward, TOrigin);
            axisDotDir = Vector3.Dot(R.Forward, ray.Direction);

            if (axisDotDir >= -RAY_EPSILON && axisDotDir <= RAY_EPSILON)
            {
                if ((-axisDotOrigin - HalfExtent.Z) > 0.0 || (-axisDotOrigin + HalfExtent.Z) > 0.0f)
                    return null;
            }
            else
            {
                float t1 = (axisDotOrigin - HalfExtent.Z) / axisDotDir;
                float t2 = (axisDotOrigin + HalfExtent.Z) / axisDotDir;

                if (t1 > t2)
                {
                    float temp = t1;
                    t1 = t2;
                    t2 = temp;
                }

                if (t1 > t_min)
                    t_min = t1;

                if (t2 < t_max)
                    t_max = t2;

                if (t_max < 0.0f || t_min > t_max)
                    return null;
            }

            return t_min;
        }

        /// <summary>
        /// Classify this bounding box as entirely in front of, in back of, or
        /// intersecting the given plane.
        /// </summary>
        public PlaneIntersectionType Intersects(ref Plane plane)
        {
            float dist = plane.DotCoordinate(Center);

            // Transform the plane's normal into this box's space
            Vector3 localNormal = Vector3.Transform(plane.Normal, Quaternion.Conjugate(Orientation));

            // Project the axes of the box onto the normal of the plane.  Half the
            // length of the projection (sometime called the "radius") is equal to
            // h(u) * abs(n dot b(u))) + h(v) * abs(n dot b(v)) + h(w) * abs(n dot b(w))
            // where h(i) are extents of the box, n is the plane normal, and b(i) are the
            // axes of the box.
            float r = Math.Abs(HalfExtent.X*localNormal.X)
                    + Math.Abs(HalfExtent.Y*localNormal.Y)
                    + Math.Abs(HalfExtent.Z*localNormal.Z);

            if(dist > r)
            {
                return PlaneIntersectionType.Front;
            }
            else if(dist < -r)
            {
                return PlaneIntersectionType.Back;
            }
            else
            {
                return PlaneIntersectionType.Intersecting;
            }
        }

        #endregion

        #region Helper methods

        /// <summary>
        /// Return the 8 corner positions of this bounding box.
        ///
        ///     ZMax    ZMin
        ///    0----1  4----5
        ///    |    |  |    |
        ///    |    |  |    |
        ///    3----2  7----6
        ///
        /// The ordering of indices is a little strange to match what BoundingBox.GetCorners() does.
        /// </summary>
        public Vector3[] GetCorners()
        {
            Vector3[] corners = new Vector3[CornerCount];
            GetCorners(corners, 0);
            return corners;
        }

        /// <summary>
        /// Return the 8 corner positions of this bounding box.
        ///
        ///     ZMax    ZMin
        ///    0----1  4----5
        ///    |    |  |    |
        ///    |    |  |    |
        ///    3----2  7----6
        ///
        /// The ordering of indices is a little strange to match what BoundingBox.GetCorners() does.
        /// </summary>
        /// <param name="corners">Array to fill with the eight corner positions</param>
        /// <param name="startIndex">Index within corners array to start writing positions</param>
        public void GetCorners(Vector3[] corners, int startIndex)
        {
            Matrix m = Matrix.CreateFromQuaternion(Orientation);
            Vector3 hX = m.Left * HalfExtent.X;
            Vector3 hY = m.Up * HalfExtent.Y;
            Vector3 hZ = m.Backward * HalfExtent.Z;

            int i = startIndex;
            corners[i++] = Center - hX + hY + hZ;
            corners[i++] = Center + hX + hY + hZ;
            corners[i++] = Center + hX - hY + hZ;
            corners[i++] = Center - hX - hY + hZ;
            corners[i++] = Center - hX + hY - hZ;
            corners[i++] = Center + hX + hY - hZ;
            corners[i++] = Center + hX - hY - hZ;
            corners[i++] = Center - hX - hY - hZ;
        }

        /// <summary>
        /// Determine whether the box described by half-extents hA, axis-aligned and centered at the origin, contains
        /// the box described by half-extents hB, whose position and orientation are given by the transform matrix mB.
        /// The matrix is assumed to contain only rigid motion; if it contains scaling or perpsective the result of
        /// this method will be incorrect.
        /// </summary>
        /// <param name="hA">Half-extents of first box</param>
        /// <param name="hB">Half-extents of second box</param>
        /// <param name="mB">Position and orientation of second box relative to first box</param>
        /// <returns>ContainmentType enum indicating whether the boxes are disjoin, intersecting, or
        /// whether box A contains box B.</returns>
        public static ContainmentType ContainsRelativeBox(ref Vector3 hA, ref Vector3 hB, ref Matrix mB)
        {
            Vector3 mB_T = mB.Translation;
            Vector3 mB_TA = new Vector3(Math.Abs(mB_T.X), Math.Abs(mB_T.Y), Math.Abs(mB_T.Z));

            // Transform the extents of B
            // TODO: check which coords Right/Up/Back refer to and access them directly. This looks dumb.
            Vector3 bX = mB.Right;      // x-axis of box B
            Vector3 bY = mB.Up;         // y-axis of box B
            Vector3 bZ = mB.Backward;   // z-axis of box B
            Vector3 hx_B = bX * hB.X;   // x extent of box B
            Vector3 hy_B = bY * hB.Y;   // y extent of box B
            Vector3 hz_B = bZ * hB.Z;   // z extent of box B

            // Check for containment first.
            float projx_B = Math.Abs(hx_B.X) + Math.Abs(hy_B.X) + Math.Abs(hz_B.X);
            float projy_B = Math.Abs(hx_B.Y) + Math.Abs(hy_B.Y) + Math.Abs(hz_B.Y);
            float projz_B = Math.Abs(hx_B.Z) + Math.Abs(hy_B.Z) + Math.Abs(hz_B.Z);
            if (mB_TA.X + projx_B <= hA.X && mB_TA.Y + projy_B <= hA.Y && mB_TA.Z + projz_B <= hA.Z)
                return ContainmentType.Contains;

            // Check for separation along the faces of the other box,
            // by projecting each local axis onto the other boxes' axes
            // http://www.cs.unc.edu/~geom/theses/gottschalk/main.pdf
            //
            // The general test form, given a choice of separating axis, is:
            //      sizeA = abs(dot(A.e1,axis)) + abs(dot(A.e2,axis)) + abs(dot(A.e3,axis))
            //      sizeB = abs(dot(B.e1,axis)) + abs(dot(B.e2,axis)) + abs(dot(B.e3,axis))
            //      distance = abs(dot(B.center - A.center),axis))
            //      if distance >= sizeA+sizeB, the boxes are disjoint
            //
            // We need to do this test on 15 axes:
            //      x, y, z axis of box A
            //      x, y, z axis of box B
            //      (v1 cross v2) for each v1 in A's axes, for each v2 in B's axes
            //
            // Since we're working in a space where A is axis-aligned and A.center=0, many
            // of the tests and products simplify away.

            // Check for separation along the axes of box A
            if (mB_TA.X >= hA.X + Math.Abs(hx_B.X) + Math.Abs(hy_B.X) + Math.Abs(hz_B.X))
                return ContainmentType.Disjoint;

            if (mB_TA.Y >= hA.Y + Math.Abs(hx_B.Y) + Math.Abs(hy_B.Y) + Math.Abs(hz_B.Y))
                return ContainmentType.Disjoint;

            if (mB_TA.Z >= hA.Z + Math.Abs(hx_B.Z) + Math.Abs(hy_B.Z) + Math.Abs(hz_B.Z))
                return ContainmentType.Disjoint;

            // Check for separation along the axes box B, hx_B/hy_B/hz_B
            if (Math.Abs(Vector3.Dot(mB_T, bX)) >= Math.Abs(hA.X * bX.X) + Math.Abs(hA.Y * bX.Y) + Math.Abs(hA.Z * bX.Z) + hB.X)
                return ContainmentType.Disjoint;

            if (Math.Abs(Vector3.Dot(mB_T, bY)) >= Math.Abs(hA.X * bY.X) + Math.Abs(hA.Y * bY.Y) + Math.Abs(hA.Z * bY.Z) + hB.Y)
                return ContainmentType.Disjoint;

            if (Math.Abs(Vector3.Dot(mB_T, bZ)) >= Math.Abs(hA.X * bZ.X) + Math.Abs(hA.Y * bZ.Y) + Math.Abs(hA.Z * bZ.Z) + hB.Z)
                return ContainmentType.Disjoint;

            // Check for separation in plane containing an axis of box A and and axis of box B
            //
            // We need to compute all 9 cross products to find them, but a lot of terms drop out
            // since we're working in A's local space. Also, since each such plane is parallel
            // to the defining axis in each box, we know those dot products will be 0 and can
            // omit them.
            Vector3 axis;

            // a.X ^ b.X = (1,0,0) ^ bX
            axis = new Vector3(0, -bX.Z, bX.Y);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.Y * axis.Y) + Math.Abs(hA.Z * axis.Z) + Math.Abs(Vector3.Dot(axis, hy_B)) + Math.Abs(Vector3.Dot(axis, hz_B)))
                return ContainmentType.Disjoint;

            // a.X ^ b.Y = (1,0,0) ^ bY
            axis = new Vector3(0, -bY.Z, bY.Y);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.Y * axis.Y) + Math.Abs(hA.Z * axis.Z) + Math.Abs(Vector3.Dot(axis, hz_B)) + Math.Abs(Vector3.Dot(axis, hx_B)))
                return ContainmentType.Disjoint;

            // a.X ^ b.Z = (1,0,0) ^ bZ
            axis = new Vector3(0, -bZ.Z, bZ.Y);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.Y * axis.Y) + Math.Abs(hA.Z * axis.Z) + Math.Abs(Vector3.Dot(axis, hx_B)) + Math.Abs(Vector3.Dot(axis, hy_B)))
                return ContainmentType.Disjoint;

            // a.Y ^ b.X = (0,1,0) ^ bX
            axis = new Vector3(bX.Z, 0, -bX.X);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.Z * axis.Z) + Math.Abs(hA.X * axis.X) + Math.Abs(Vector3.Dot(axis, hy_B)) + Math.Abs(Vector3.Dot(axis, hz_B)))
                return ContainmentType.Disjoint;

            // a.Y ^ b.Y = (0,1,0) ^ bY
            axis = new Vector3(bY.Z, 0, -bY.X);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.Z * axis.Z) + Math.Abs(hA.X * axis.X) + Math.Abs(Vector3.Dot(axis, hz_B)) + Math.Abs(Vector3.Dot(axis, hx_B)))
                return ContainmentType.Disjoint;

            // a.Y ^ b.Z = (0,1,0) ^ bZ
            axis = new Vector3(bZ.Z, 0, -bZ.X);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.Z * axis.Z) + Math.Abs(hA.X * axis.X) + Math.Abs(Vector3.Dot(axis, hx_B)) + Math.Abs(Vector3.Dot(axis, hy_B)))
                return ContainmentType.Disjoint;

            // a.Z ^ b.X = (0,0,1) ^ bX
            axis = new Vector3(-bX.Y, bX.X, 0);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.X * axis.X) + Math.Abs(hA.Y * axis.Y) + Math.Abs(Vector3.Dot(axis, hy_B)) + Math.Abs(Vector3.Dot(axis, hz_B)))
                return ContainmentType.Disjoint;

            // a.Z ^ b.Y = (0,0,1) ^ bY
            axis = new Vector3(-bY.Y, bY.X, 0);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.X * axis.X) + Math.Abs(hA.Y * axis.Y) + Math.Abs(Vector3.Dot(axis, hz_B)) + Math.Abs(Vector3.Dot(axis, hx_B)))
                return ContainmentType.Disjoint;

            // a.Z ^ b.Z = (0,0,1) ^ bZ
            axis = new Vector3(-bZ.Y, bZ.X, 0);
            if (Math.Abs(Vector3.Dot(mB_T, axis)) >= Math.Abs(hA.X * axis.X) + Math.Abs(hA.Y * axis.Y) + Math.Abs(Vector3.Dot(axis, hx_B)) + Math.Abs(Vector3.Dot(axis, hy_B)))
                return ContainmentType.Disjoint;

            return ContainmentType.Intersects;
        }

        /// <summary>
        /// Convert this BoundingOrientedBox to a BoundingFrustum describing the same volume.
        ///
        /// A BoundingFrustum is defined by the matrix that carries its volume to the
        /// box from (-1,-1,0) to (1,1,1), so we just need a matrix that carries our box there.
        /// </summary>
        public BoundingFrustum ConvertToFrustum()
        {
            Quaternion invOrientation;
            Quaternion.Conjugate(ref Orientation, out invOrientation);
            float sx = 1.0f / HalfExtent.X;
            float sy = 1.0f / HalfExtent.Y;
            float sz = .5f / HalfExtent.Z;
            Matrix temp;
            Matrix.CreateFromQuaternion(ref invOrientation, out temp);
            temp.M11 *= sx; temp.M21 *= sx; temp.M31 *= sx;
            temp.M12 *= sy; temp.M22 *= sy; temp.M32 *= sy;
            temp.M13 *= sz; temp.M23 *= sz; temp.M33 *= sz;
            temp.Translation = Vector3.UnitZ*0.5f + Vector3.TransformNormal(-Center, temp);

            return new BoundingFrustum(temp);
        }
        #endregion
    }
}

redpajama_set_name: RedPajamaGithub


text:
BREAKING NEWS: Puerto Rico Suffers from Severe Earthquakes
Kate Stuzin, Copy Editor
Rattled residents of Puerto Rico already on edge after the deadly 6.4 magnitude earthquake on the Richter Scale that occurred earlier this month, faced another earthquake on Wednesday, registering a magnitude of 5.2. According to the United States Geological Survey, more than 1,280 earthquakes have hit Puerto Rico's southern region since Dec. 28, with more than 20 of them magnitude 4.5 or greater.
Basically, the Richter scale measures earthquakes on a logarithmic scale, meaning that the numbers on the scale measure factors of 10 and ranges from 1-10. This means that an earthquake that measures 4.0 on the Richter scale is 10 times as powerful as an earthquake that measures 3.0.
Seismologists working with USGS do not know much about the faults causing the earthquakes, but they believe aftershocks will continue to decrease in frequency over the next 30 days.
Also on Wednesday, the Trump administration ended its month-long hold of more than $8 billion in disaster aid relief Congress appointed for Puerto Rico, a senior Department of Housing and Urban Development official confirmed.
In the last two years, Puerto Ricans have felt the effects of multiple disasters, beginning with Hurricane Maria in 2017 and followed by a political corruption crisis last year involving the arrests of top government officials.
According to the humanitarian group Direct Relief, this month's earthquakes left more than 5,000 people homeless and have further exacerbated infrastructure problems that were never resolved after Maria. The series of earthquakes have only amplified fears that structures are further weakened.
The Costa Sur Plant, which produces more than 40% of Puerto Rico's electricity, was badly damaged in last week's quake and remains offline indefinitely. Despite all this, Puerto Rico's public utility, Puerto Rico Electric Power Authority, tweeted last Monday that 99% of their customers have their electricity back.
Currently, about 170 Red Cross workers have provided care and distributed emergency supplies, including hygiene kids, medical equipment and comfort items. Schools will remain closed until Jan. 22 or until engineers finish inspections.
To get involved, text REDCROSS to 90999 to make a $10 donation or send supply donations to the Salvation Army. Please send in the following:
Gauze and Tape
Adhesive/Non-Adhesive Bandages
Eye and Ear Drops
3 in 1 Shampoo
Toothbrush and Toothpaste
Feminone Hygiene Products
Pre-Made Baby Formula
Kate Stuzin, Managing Editor
Kate Stuzin is a senior and the Managing Editor. This is her third year on staff and she looks forward to curating social media content for The Panther...
Dear Classmates, Please Keep Wearing Your Mask
Samantha Elkins, News Editor
Dear Classmates, At this point, we are all well aware of this pandemic. The countless, "So, are you virtual or in-person?" conversations with adults seem routine now....
Four Hostages Held in Texas Synagogue
Following The Dream: Celebrating Martin Luther King, Jr. Day
A Timeline of the 2021-2022 American College Bowl Games
The Panther 2021-22 Issue 2: Heroes at Home
The Panther Staff
Click here to view the Panther 2021-2022's second issue: Heroes at Home!
The Panther 2021-22 Issue 1: Far From Home
The Panther 2020-2021 Issue 7: Class of 2021 in Bloom
The Panther 2020-21 Issue 6: The Climate Crisis
Florida Lawmakers Propose Bill Outlawing Abortion After 15 Weeks
Prince Andrew Loses Military Titles Amid Sexual Abuse Lawsuit
Supreme Court Blocks Biden's Vaccine Mandate for Large Businesses
Staple Miami Barbeque Restaurant 'Shorty's' Land Sold For $14.5 Million
University of Florida President Kent Fuchs Steps Down
U.S. Top Schools Allegedly Partake In Illegal Conspiracy To Limit Student Financial Aid
Goodbye Delta, Hello Omicron: A Breakdown of the CDC's Newest Protocols
Bob Saget Found Dead In Orlando Hotel at Age 65
COVID-19 Test Supply Shock In South Florida

redpajama_set_name: RedPajamaCommonCrawl


text:
HMAS Melbourne brings 27 years of service to a close
27 Oct 2019 8:15 pm AEST Date Time
Joint Media Release:
Senator for New South Wales, Hollie Hughes
The Royal Australian Navy has celebrated 27 years of service by HMAS Melbourne during a decommissioning ceremony, at her home port of Garden Island in Sydney.
Minister for Defence, Senator the Hon Linda Reynolds CSC acknowledged the Navy personnel whose service on Melbourne has contributed to security at sea, at home and abroad.
"The motto of HMAS Melbourne is, she gathers strength as she goes, and for 27 years she has served the Navy with distinction, playing an important role in protecting Australia's maritime interests," Minister Reynolds said.
"Thousands of men and women have called this ship home since she was commissioned in 1992, and for some, Melbourne represents key milestones in their lives and careers."
Melbourne has steamed more than 900,000 nautical miles, deployed on operations to the Middle East eight times and earned battle honours for service in East Timor, the Persian Gulf and Middle East.
She spent most of 2018 and 2019 deployed overseas, including a four-month deployment through north Asia earlier this year where she conducted international maritime surveillance operations to enforce sanctions against North Korea.
Representing the Government at the decommissioning ceremony, Senator for New South Wales, Hollie Hughes said today's ceremony was bittersweet.
"Melbourne will be missed. She has been an integral part of the Navy and the community here at Garden Island," Senator Hughes said.
"It was an honour to attend the ceremony and recognise the men and women of HMAS Melbourne who contributed to her outstanding legacy."
A compile of archive and recent vision of HMAS Melbourne can be found here: https://bit.ly/2lP2uFZ
Tags:Army, Asia, Aussie, Australia, Australian, Defence, East Timor, Government, import, media, Melbourne, Navy, New South Wales, North Korea, operation, sanctions, Sydney, Timor
Tonight's Summer Series event has been cancelled
Well-known weather presenter announced as ambassador
Tonight's Summer Series event has been canceled
City set for Australia Day celebration
Bayside College sporting redevelopment officially open
Council seeks planning protection for Sunshine Silos
New work for Budj Bim sites


She has made a difference for the arts and a wide array of nonprofit organizations. He has worked diligently to serve those experiencing homelessness. Both are recipients of UNCG's top university honors.
Kathy E. Manning received UNCG's Charles Duncan McIver Award, which recognizes individuals who have rendered distinguished public service to the state or nation. The bronze medal bears the likeness of Charles Duncan McIver, the founding president of the institution that is now UNCG.
The Rev. Mike Aiken received the Adelaide F. Holderness / H. Michael Weaver Award, which honors North Carolinians who have rendered distinguished public service to their community or state. It is named in honor of Adelaide F. Holderness '34 and H. Michael Weaver of Greensboro.
The honors were presented by UNCG Chancellor Linda P. Brady during a May 21 program that also recognized donors to the university.
Kathy E. Manning has long been an advocate for the arts in Greensboro. She is the current chair of the Board of Triad Stage, where she was a founding member. She serves on the Board of the Greensboro Symphony, and was the founding chair of "ArtBeat," now called "Seventeen Days." She was on the original fundraising team for the Greensboro Children's Museum and served on its founding board. She is the current chair of the Board of the Community Foundation, where she previously chaired the Grants Committee and its Development Committee.
She spearheaded the effort to secure private funding for a new downtown performing arts center in Greensboro. Under her leadership, the fundraising team has raised more than $35 million in private funds to build this facility, which will be called the Steven B. Tanger Center for the Performing Arts. Manning worked to gain approval of the Center by the Greensboro City Council, led the effort to create the governance structure for the Center and chaired the Architectural Selection Committee for the Tanger Center.
Manning's passion for working with non-profit organizations extends beyond the arts. She recently completed a three-year term as the chair of the Board of Trustees of The Jewish Federations of North America (JFNA), the national organization that oversees more than 155 Jewish federations around the United States. She is a past chair of the Board of the Greensboro Jewish Federation, where she served as chair of the Women's Annual Operation Exodus Campaign, and chair of Women's Cabinet. She has twice served as the chair of the Board of Trustees of the B'nai Shalom Synagogue Day School in Greensboro. Together with her husband, Randall Kaplan, Manning has led the United Way de Tocqueville Campaign and chaired the Annual Dinner for the Greensboro chapter of the National Conference for Community and Justice.
The Rev. Mike Aiken is the executive director of Greensboro Urban Ministry, an inter-faith outreach ministry serving the poor, a post he has held since 1985. In this role, Aiken has helped Greensboro and the Triad community make tremendous strides in addressing the needs of individuals experiencing poverty, hunger and homelessness.
Greensboro Urban Ministry was founded in 1967 by representatives of several downtown congregations to provide emergency financial assistance and meet the growing needs of the poor in the inner city. By 1981, support for the ministry had grown to 90 congregations, allowing for the opening of Pathways Center to provide temporary shelter to the homeless families. The next year, both Weaver House Singles Shelter and Potter's House Community Kitchen opened, followed by Project Independence in 1984. This would lead to the building of transitional housing complex Partnership Village in 1999. The board of Greensboro Urban Ministry approved the implementation of Beyond Pathways, now Beyond GUM, in 2008 for the purposes of diversion and rapid re-housing.
Prior to joining Greensboro Urban Ministry, Aiken served as executive director of Fayetteville Urban Ministry. He plans to retire in July 2015.
This summer, take advantage of the on-campus fitness program exclusively for UNCG faculty and staff. Bring your UNCG I.D. as well as a towel and water bottle. Wear comfortable exercise apparel. The program starts June 3 and continues weekly till the end of July. Sessions are Tuesdays, 12:30-1:30 p.m.
All sessions are in the Student Recreation Center Fitness Studio. An SRC membership is not required to participate.
*Reservations for these particular sessions are required at least one hour before class dates and classes are subject to change.
UNCG master's recipient Lauren Mottle plans to become a professor at a liberal arts university, after she completes her doctoral program. A new program – the Future Leaders Graduate Program – has helped her on her way.
She was one of four graduate students at UNCG and NC A&T who recently completed the special program designed to prepare them for future careers in academia or in business, industry and the nonprofit sector. The Preparing Future Leaders (PFL) Program, jointly developed by the two universities, offers two distinct tracks: one for future faculty and one for students interested in business/industry or nonprofit careers.
Recently the program added a unique component through a grant provided by the Council of Graduate Schools to teach students how to develop student learning outcomes and assess student learning.
Completing the PFL program in May are Lauren Mottle, Kimberly Mozingo, and Jennifer T. Stephens from UNCG and Babatunde Adebiyi from NC A&T. The program takes about two years to complete and gives students a chance to experience a behind-the-scenes look at a range of academic and professional opportunities. While no academic credit is awarded, students completing the program receive a notation on their transcript.
Several students received monetary awards for their outstanding work in the program. Lauren Mottle from UNCG and Bonaventure Mills-Dadson from NC A&T each received $1,500 awards in the Preparing Future Faculty track. Judges noted that both winners articulated a thoughtful assessment plan to guide and fine-tune class instruction with clear, measurable student learning objectives.
In the Professional track, NC A&T student Myron White also received a $1,500 award for an outstanding proposal and business plan.
In addition, the following graduate students received $600 awards for their superior work in Preparing Future Faculty modules: NC A&T students Jones Ahoi, David Dodoo Amoo, Maquisha Mullins and Myron White. Student winners from UNCG are Brittany Chambers, Melissa Ridley Eames, Kamilah Legette, Sarah E. McCarthy, Heather Mitchell, Jennifer Stephens and Elizabeth Warren.
The program includes workshops, hands-on activities, and requires participants to identify a mentor in their chosen field who can provide guidance throughout. About 80 students are enrolled and plans call for numbers to increase by 25 students annually.
"Students completing the PFL program will have a head start in seeking a good position in any future work role," said Dr. William Wiener, dean of the Graduate School at UNCG. Generally, about half of PhD candidates will seek positions in academia and half seek jobs in other sectors. As part of the program, students prepare a web-based portfolio to track their progress and to share professional documents such as video clips of presentations and major papers. An important part of PFL is teaching participants how to assess student learning in the classroom and effective performance in business and industry.
UNCG and NC A&T received one of six grants nationwide awarded by the Council of Graduate Schools to specifically incorporate assessment activities for students into their Preparing Future Leaders program. The other schools selected for grants included: Cornell University, Harvard University, Indiana University, Michigan State University and the University of California, Merced.
To learn more or to apply for the program, visit http://grs.uncg.edu/pfl.
Visual: some of the program's students and leaders.
With Reade Taylor's retirement on June 30 and the planned arrival of Charlie Maimone as vice chancellor for Business Affairs on Aug. 1, Chancellor Linda P. Brady has asked Steve Rhew to serve as interim vice chancellor for the month of July.
Steve Rhew has held a variety of finance leadership roles since joining UNCG nearly 30 years ago. He has served as associate vice chancellor for finance since 1995.
UNCG has been selected to participate in the early-June Institute on General Education and Assessment, organized by The Association of American Colleges and Universities (AAC&U).
UNCG's team includes Dr. Jonathan P. Zarecki, Associate Professor of Classical Studies and Chair of UNCG's General Education Council; Dr. Jodi Pettazzoni, Director of Accreditation and Assessment; Dr. Bryan Terry, Associate Provost for Enrollment Management; Prof. Regina McCoy Pulliam, AP Professor and Director of Undergraduate Studies for the Department of Public Health Education; Dr. Susanne Rinner, Associate Professor of German Studies and Faculty Coordinator of The Global Village; and Nancy Bucknall, Director of the College of Arts & Sciences Advising.
AAC&U institutes offer campus teams a time and place for sustained collaborative work on a project of importance to their campus along with a curriculum focused on important trends, research and best practices, and a resident faculty of educational experts.
Awarded to an individual who works quietly behind the scenes for the good of Student Affairs and UNCG and who, though not publicly celebrated, demonstrates leadership through dedication and service.
This award is given to a Student Affairs employee who treats other team members with respect. They consider the ideas and opinions of others, share information, willingly accept responsibility, and work beyond their office and/or department. Utilizing strong interpersonal skills, they work towards maintaining harmonious relationships and enhance both team productivity and broader university collaboration.
This award is presented to either a person or a department for their collaborative efforts with Student Affairs. The department and/or person is presented this award because they have worked with Student Affairs to create and implement a program, assist with a crisis or community event that affected the campus, or provide Student Affairs with opportunities to learn about new trends in the field of higher education through research or teaching.
This award recognizes a Student Affairs employee who has displayed exemplary performance both in the employee's own responsibilities as well as service to the division, university and community beyond assigned duties for the division of Student Affairs and UNCG.
Barbara Gainey is the first recipient of this new award, which is presented to employees who have created a legacy of excellence, supported student success, and provided outstanding contributions to the division and the university for a minimum of seven years. The candidate should have answered the university's call to Do something bigger altogether.
On May 5, Staff Senate wrapped up the "Fill the truck" campaign for the Guilford County Animal Shelter. The Faculty vs. Staff kickball game, which was postponed till the fall semester, was expected to be a big contributor to the cause. Still, Staff Senate collected animal food, blankets, bowls, paper products, cleaning supplies and other miscellaneous items for the shelter, as well as cash donations in the amount of $783. Staff Senate grilled hotdogs and served soft drinks that day, as people dropped of their donations of items or money. Many had made donations in the boxes throughout campus.
"We would like to thank everyone for your generosity and compassion for the animals," said Jeannie Lasley, UNCG Staff Senate Service Committee co-chair.
The committee contributed one more great service project before the semester ended. They held a clean up day at the Sullivan Garden located in the Greensboro Downtown Greenway near Lee Street. They pulled weeds, tidied the area and put down fresh mulch.
The UNCG Weight Watchers @ Work is open to the entire UNCG community including students, faculty and staff.
Interested in joining the UNCG Weight Watchers at Work Program? Come to their Open House on Monday, June 2, 2014, in Bryan 113 at 12:15 p.m. Coming to a meeting provides you an opportunity to see how a meeting is conducted, meet current participants and have your questions answered by group leader Bobbie Gaski.
The Weight Watchers at Work program consists of a series of informative and motivational group meetings. Meeting time ranges from 45 minutes to one-hour weekly on Mondays in Bryan 113 from 12:15-1:15 p.m. with weigh-in starting at noon.
For more information, contact Elizabeth L'Eplattenier at 334-3410 or email ebleplat@uncg.edu.
Grogan Residence Hall will be closed down for a year starting early June 2014.
UNCG Facilities Design and Construction will coordinate the renovation of this residence hall similar to what they did for Reynolds Residence Hall this past year, says Fred Patrick, director of Facilities Design & Construction. Grogan Hall, which opened in the early 1960s, will receive a new electrical service and a new emergency electrical generator. The heating and air conditioning systems will be replaced, and new mechanical units will be installed in all of the student rooms. The bathrooms will be completely renovated with new showers, lavatories, and toilet facilities. Student room corridors will receive a new coat of paint and new carpet. Student rooms will be given a new coat of paint, new carpet, reworked individual closets, and new light fixtures. Grogan Hall's first floor will be modified and expanded to enclose the existing exterior, covered patio on the east end of the building. This patio will be enclosed with aluminum and glass exterior walls to create a new lounge for the Living/Learning Communities and additional office space. On the lower level, the game room and kitchenette will be renovated as well.
Grogan Residential College will be housed temporarily in the newly renovated Reynolds Hall during this year.
Members of the UNCG community will have the opportunity to shred paper documents for free Friday June 13, from 9 a.m.-1 p.m. The event will be at the Walker Ave. traffic circle close to the EUC Bookstore and Jackson Library Connector Entrance.
The mobile shredding truck is designed to take large amounts of paper for shredding onsite, users can even choose to watch the secure destruction on a closed circuit TV on the truck. Confidential materials from your office or home are welcome. This event is limited to UNCG faculty, staff, students and alumni. Help will be available to unload your car at the traffic Walker Ave. traffic circle but no parking will be available. The traffic circle must remain free of parked cars. Staples, envelope windows and small paper clips are fine to be included with the material but no binders will be accepted. Be sure all paper is out of any binders before bringing your material.
At last year's UNCG Shred-a-Thon, about 32,000 pounds of material was shredded and recycled, roughly equivalent to 272 trees' worth of paper.
University Archives can help you determine what records should be transferred to the archives and provide you with information about the transfer procedures (http://uncg.libguides.com/transferring_to_archives). If you have any questions about the historic value of your records (both paper and digital), contact University Archivist Erin Lawrimore, erlawrim@uncg.edu.
UNCG is required to comply with the North Carolina Public Records Law concerning the retention and disposition of records. Records are to be disposed of according to University and State approved schedules. The UNC General Records Retention and Disposition Schedule is available on the Records Management website. If you have questions about records management, contact 6-TECH at 256-8324.
Several dozen schoolkids were on the UNCG campus this month to test their math acumen.
On Thursday, May 1, 2014, the UNCG Department of Mathematics and Statistics hosted the Central Region State Mathematics Contest Finals. The State Mathematics Contest is a problem-solving competition through which students interested in mathematics can become familiar with more sophisticated and advanced mathematical concepts and ideas that are not covered in traditional school curricula. Every year, the culmination of the contest is a final test that determines statewide winners. The final test is administered simultaneously at three sites in the Eastern, Western, and Central regions of our state. Fifty-one students from 19 middle schools and high schools came to UNCG to compete in two divisions: Level I and Level 2. Fifteen students competed in Level 1 and 36 students competed in Level 2. All students received a Certificate of Participation and the top 10 competitors in each division received trophies.
UNCG Chancellor Linda P. Brady has announced the appointment of Charles A. Maimone as vice chancellor for business affairs, effective August 1. Maimone will serve as a member of the executive staff and lead the Business Affairs Division with overall responsibility for financial administration and university operations.
Maimone will join UNCG from UNC Wilmington, where he has served as vice chancellor for business affairs and chief financial officer for the past six years. While at UNCW, Maimone oversaw financial services, human resources, facilities operations, university police, auxiliary and business services, institutional risk management, and environmental health and safety. He also led a variety of campus-wide initiatives, including the development and implementation of shared services, analytics, unified budget process, alternative distance education business models, and UNCW's Center for Innovation and Entrepreneurship.
"We are pleased that Charlie Maimone will be joining UNCG in this strategically important role. He is an accomplished business affairs leader who brings extensive UNC system experience and a successful record of driving innovative funding and efficiency solutions in a dynamic environment," Brady said.
Prior to joining UNCW, Maimone held several key leadership roles with The College of William and Mary, including associate vice president for administration and director of auxiliary services. He previously held a series of auxiliary services, housing and food services, and residence life positions at UNCW, as well as residence hall-related roles with Miami University and Kent State University, both in Ohio.
Maimone received his B.A. in sociology and M.A. in education from Kent State University, and an M.B.A. from The College of William and Mary.
"I am very excited to have the opportunity to join UNCG, which has a rich history as one of the three original members of the University of North Carolina and a strong reputation for helping students achieve academic success while contributing to the community," Maimone said.
Thursday, June 5, 3-day event begins. Details.
Good-bye: Don Shore, Human Resources; Annie Martin, Nursing; Gloria Hayes, Communication Studies; Charles Shepherd, Chemistry & Biochemistry; Jessica Beamon, Music, Theatre and Dance; Jacqueline B. Oates, Undergraduate Studies; Michael Shepherd, Education; Michael Leonard, Education; Christopher Jones, Learning Technologies; Angel Biegert, Education; Jennifer Stanley, Theatre; Glenda Sparks, Continual Learning; Victoria Kurdyla, Sociology; Lettie Cobb, Gateway University Research Park; Anna Croom, Annual Fund; Steve Tuck, Facilities Services; Jeff Belton, Postal Services; Scott Winsted, Printing Services; Tracy Clemmons, Kinesiology; Charles Sanford, ITS; and Ashley Corbett, Human Resources.
Lennie Alexander will retire at the end of June after 31 years of service in gift processing for University Advancement. A retirement reception will be held for her on Monday, June 23, at 3 to 5 p.m. in the Virginia Dare Room, Alumni House. The campus community is invited to stop by and give her well wishes. Questions? Email rblaplan@uncg.edu.
UNCG senior runners and twin sisters Shaina Sumney and Chelsea Sumney have qualified for the 2014 NCAA Outdoor Track & Field Regionals, May 29-31 in Jacksonville, Fla. Shaina qualified in two events at the NCAA East Regional, the 3,000-meter steeplechase and the 5,000-meter race. Chelsea earned a spot in the 3,000-meter steeplechase to run with her sister. They are both speech pathology majors.
The 3,000-meter steeplechase is slated as the last race of the day May 30 at 9:30 p.m. while the 5,000-meter contest is scheduled for Saturday, May 31, at 8:45 p.m. The top 12 finishers in each race will advance to the NCAA National Championships June 11-14 in Eugene, Ore.
Dr. Gwendolyn O'Neal (Bryan School) has received the 2014 Alumni Award of Distinction from the College of Education and Human Ecology at Ohio State University.
O'Neal is professor and chair of UNCG's Department of Consumer, Apparel and Retail Studies (CARS). She received a PhD in textiles and clothing from Ohio State in 1977.
A lecture by Dr. Watson Jennison (History) aired on C-SPAN3's American History TV (AHTV) May 24. His lecture focused on political unrest in the early American republic, with a look at local uprisings against the Federalist-led U.S. government in the 1790s. He spotlighted the Whiskey Rebellion in Pennsylvania and the formation of the Trans-Oconee Republic in western Georgia to illustrate the spread of discontent at the time. The lecture is available for online viewing in its entirety at www.c-span.org/history.
Dr. Perry Flynn (Communication Sciences and Disorders) received new funding from the Phoenix Academy for the project "Speech Language Pathology Service Contract with Phoenix Academy." It provides for speech and language therapy services to children in the Phoenix Academy who qualify for these services.
Dr. Tsz-Ki M. Tsui (Biology) received additional funding from the NCSU Water Resources Research Institute for the project "Linkages of mercury and methane cycles in Piedmont streams and rivers in North Carolina, and implications for mercury bioaccumulation in food webs." Methylmercury is a highly toxic compound and can extensively bioaccumulate and biomagnify in aquatic food webs. Methylmercury is produced mainly by anaerobic microbes in the environment, but its processes are poorly characterized. The proposed research will examine the inter-relationships in the production of methane and methylmercury in Piedmont streams in North Carolina. Methanogens have been recently suggested to be the principal methylators of mercury in freshwater environment. This research will be the first study examining the biogeochemical coupling of both processes in stream ecosystems, which represent important water resources in North Carolina and elsewhere.
Dr. Amanda Tanner (Public Health Education) received additional funding from Wake Forest University Health Services for the project "Using CBPR to Reduce HIV Risk Among Immigrant Latino MSM." The Southeast has the fastest-growing Latino population in the United States and at the same time carries a disproportionate HIV burden, the abstract notes. The intervention will be based on social cognitive theory and theory of empowerment education and was developed using community-based participatory research (CBPR). Her study is a result of a long-term community/university partnership.
Dr. Erick Byrd (Marketing) received new funding from the North Carolina Department of Agriculture and Consumer Services for the North Carolina Winery Categorization Model Research Project. It will conduct a comprehensive inventory and assessment of wineries in North Carolina, develop an NC Winery Categorization Model, classify all the wineries using the model and develop recommendations to ensure the growth, image, tradition and quality brand image as the industry continues to grow.
Dr. William Mills-Koonce (Human Development and Family Studies) received continued funding from the National Institutes of Health for the project "Integrating Demography and Biosocial Stress Models of LGBTI Family Formation." The current research will use both secondary data analyses of longitudinal national datasets such as the U.S. Census and American Community Survey to examine within-state changes in rates of LG family structures over the past 10 years and how these changes correlate with state-level sociopolitical climates and public policies pertinent to LG family formation. The abstract further states that this will be followed by a pilot study that will explicitly examine how sociopolitical and ecological factors are associated with decisions regarding family formation and LG family functioning as mediated by individual mental health, relationship stability, and stress load.
Dr. Rebecca MacLeod (Music Education) was awarded the 2014 String Researcher Award by the American String Teachers Association. The String Researcher Award is awarded to a researcher whose work has contributed significantly to scholarship in string education and/or performance. This year's award honors an early-career researcher whose scholarly work shows much promise in making continued important contributions to research.
In 25 years as a professor in the UNCG Department of Educational Leadership and Cultural Foundations, Dr. Kathleen Casey has hooded countless PhD graduates. She stopped counting at 50.
But the spring 2014 commencement was her last. Casey, who is retiring, hooded the Rev. Dr. Otto Harris and will now move on, leaving her legacy to her former students, many of whom are now professors.
"I have worked with so many wonderful students. They've had life experiences and they work hard. It's really one of the ways they make sense of the world; they come out wanting to make that world a better place, " she says, seated in her living room across from a framed print her co-workers gave her as a retirement gift. It's a Japanese woodcut called "Tree of Dreams".
Casey's dreams are summed up in the doctoral students she has coached and mentored over the years. She remembers the blood, sweat and tears that went into each dissertation. A study of first-generation high school graduates in a cotton mill village. Studies of Liberian refugee women and rural women art educators. Even a study of teaching disenfranchised students through wrestling.
Casey brought an innovative style of research to UNCG's School of Education when she was hired. Called narrative research, it draws on individual stories to examine educational issues.
Her own life story began in New York. It took her to England and Nigeria, then back to the University of Wisconsin-Madison for her PhD.
And Casey's story is far from over. She remains a busy social activist, sits on the board of Beloved Community Center and attends Faith Community Church.
Story originally in UNCG Now.
Fear can be a good thing — if you manage it right. Dom Amendum urged UNCG's Class of 2014 to embrace their fear, and overcome it, as he addressed new graduates during the university's spring commencement May 9 in the Greensboro Coliseum.
He was, Amendum told the audience, "not nervous, not jittery, but full of fear" when Chancellor Linda P. Brady asked him to speak at commencement. A 2001 graduate of UNCG's School of Music (now the School of Music, Theatre and Dance), he has accomplished great things on Broadway, directing music for "First Date" and the smash-hit Oz musical "Wicked." His ultra-competitive career path has required great courage, but he felt a bit like the Cowardly Lion when his alma mater invited him to speak.
But Amendum's speech was far from pessimistic, extolling the beauty of fear overcome. He recounted the story, in third-person, of how a dark-haired girl with deep brown eyes he met in the nacho line at an amusement park once coaxed him to try the roller coaster. It was called The Guillotine.
Chancellor Brady conferred 2,561 degrees at commencement, including 1,938 bachelor's degrees, 555 master's degrees, nine Specialist in Education degrees, and 59 doctoral degrees. Of this total, 54 degrees went to international students.
Dom Amendum's speech may be read here.
As they left their residence halls last week, UNCG students filled the Cram and Scram donation bins with usable items they no longer needed – or just weren't going to transport home.
Now these items will be for sale, in the annual Cram and Scram Rummage Sale.
It will be held in the UNCG Elliott University Center Cone Ballroom on Saturday, May 31, starting at 8 a.m. "Most of the really good items go first," says Ben Kunka, director of UNCG Office of Waste Reduction and Recycling.
All items will be 50 cents each, cash only.
The 50-cent price is not designed to bring in large amounts of revenue, Kunka explains, but instead to encourage community members to reuse these items that still have lots of life left in them. The sale is open to the public. There will be free parking at the Walker Ave. Parking Deck.
The money generated at the sale funds environmental learning opportunities on campus. The leftover items are reused through Bee-Thrifty Thrift Store on Market St. Any non-perishable food collected as students leave is not sold at the sale but instead donated to Greensboro Urban Ministry.
In the weeks before the sale, a Boy Scout troop will volunteer time to help Kunka sort the items into basic categories. That will make an easier shopping experience for the customers lined up on May 31.
April 5 was a special night for Hre Rhalan (UNCG Grounds).
At Piedmont Triad International Airport, he saw and embraced his wife and three of his children for the first time in more than a decade. Montagnards, they had all lived through many years of persecution in Vietnam.
He was flown to the U.S. in 2002. In 2003, he began work at UNCG Grounds. He started to learn English, at first a few nights a week with classes at GTCC. After a lot of studying, he became a U.S. citizen in 2009.
In addition to his full-time UNCG job, he took a full-time job at Koury Convention Center. As he says, he hasn't been able to sleep much anyway, with his family in harm's way halfway around the world. What he could do was work hard and save his money.
She was in prison. She refused to sign a note denying her religious faith. "Her mother, who's very old, looked after our children," Rhalan says.
"In July 2012, she got out. I tried to get her to here," he explains. He used the money he'd saved on lawyer fees, transportation for his family for a harrowing journey to the airport (some police smashed the bus' windows, he says, to try to keep her from leaving), and the plane tickets.
There are now more Montagnards in Guilford County that anywhere aside from Vietnam, he explains. (He and two other Montagnards are part of UNCG Grounds.) Lutheran Family Services helped many – including Rhalan – resettle. "In 1977, so many died among the Montagnards." The war had ended – the U.S. forces, which his father had aided, had left.
And many Montagnards have died or been imprisoned since.
"Our group left," he explained, in the 1970s. They headed toward Cambodia. ""Everyone that stayed, they all died." His stories of the following years are hard to fathom. Seeing women being forced to dig what they were told would be their own graves, before being released. His being put to hard labor by the Vietnamese. At one point, running from the Vietnamese for 12 nights in the jungle, with no food aside from one snake.
He is hopeful he will be reunited with his oldest son, his daughter-in-law and his grandson.
For now, he is counting his blessings.
Hal Shelton, interim director of UNCG Grounds, recalls when Rhalan first joined UNCG, translators helped with the communication. Soon, that wasn't needed. At UNCG, he found a supportive environment.
Each December, UNCG employees have their Angel Tree, to help ensure every employee's family has a good holiday. He learned he and his family were selected this past year to receive holiday gifts. The presents remained unopened – until last month. And they actually received a tree, he adds. It will go up next December, a reminder of his co-workers' support.
Photo: Hre Rhalan speaks about his life in Vietnam, in the UNCG Grounds building.
The work of Family Service of the Piedmont — promoting financial stability, providing mental health services, stemming domestic violence and preventing child abuse — has an undeniable positive social impact.
The work of a pair of MBA students from the UNCG Bryan School of Business and Economics proves those missions have a significant economic impact as well.
For their MBA Capstone Project, students Ashley Ferrell and Will Kapakos conducted an economic impact analysis looking at the agency's four main service areas. Their research found Family Service of the Piedmont has a significant impact in Guilford County.
Consider a housing foreclosure. The capstone research found that one repossession results in a $2,000 decrease in property values for homes within a 500-foot radius. The $603,000 the agency spent on programs to help 365 families keep their homes in 2012 had an overall value of more than $18 million. For every $1 spent on the program, the organization returned up to $31 dollars in property value savings.
The analysis proved other services also have a high economic return on investment. The agency's Domestic Violence Intervention Program, which has a 92 percent success rate, cost $82,000 but had an economic impact of $1.7 million. Every dollar spent saved the county $20.50 in inmate, court, probation and law enforcement costs.
The MBA Capstone Program is designed to give students hands-on, real-world experience in strategic management. UNCG's MBA program is ranked No. 13 by Bloomberg BusinessWeek for evening programs. Since 2006, the capstone program has matched MBA students with not-for-profit and for-profit businesses throughout the Triad, including multiple projects with multinational corporations such as Volvo Group, VF Corporation, Red Hat and TE Connectivity.
In last year's SoCon Softball Tournament, Spartan pitcher Raeanne Hanks faced Georgia Southern's Sarah Purvis in the championship game in an epic pitcher's duel. It was scoreless through several extra innings, till Georgia Southern finally scored.
This year in the double elimination tournament, UNCG lost their first game, to Samford. (UNCG had been on a seven-game win streak.) But in their second game, they defeated Elon, then scrapped their way to a win over Furman that ended at 1 a.m. Friday morning. (See clip of final play.) That kept them alive till 1 p.m., when they'd face the No. 1 seed, Georgia Southern. Raeanne Hanks, who'd already pitched most of UNCG's innings in the tournament, would pitch opposite Sarah Purvis, SoCon Pitcher of the Year. It was another low-scoring pitcher's duel – and UNCG won. Hanks gave up zero earned runs, as UNCG won 2-1.
They faced No. 2 seed Chattanooga in the title game Saturday, on ESPN3. Raeanne Hanks pitched. Lindsay hit another home run, extending her new SoCon Tournament record for homers. The home fans were loud, as was the Spartan bench. But Chattanooga prevailed 4-3. For the second straight year UNCG made an improbable run to the title game, only to fall one run short.
Once again they have a lot to be proud of.
UNCG finished with back-to-back 30-win seasons for the first time since the 2003 and 2004 seasons.
Photo from tournament by Carlos Morales.


Please arrive at least 15 minutes prior to your scheduled treatment to complete health consultation and enjoy our complimentary refreshment. Arriving late will result in a reduction of treatment time.
The minimum age of 18 is required for access to and treatments in the spa. Anyone under 18 years of age must be accompanied by a responsible adult.
Since treatments are reserved especially for you, cancellations without 24 hour notice or "no-show" will incur a 100% cancellation charge of the cost of treatment.
We respectfully request all guests to help us maintain the peaceful serenity of the Spa by turning off cell phones and mobile devices while in the spa.
Perfect for any occasion, gift certificates are available for purchase in any dollar amount from both online and at the spa reception desk. Gift Certificates are redeemable for our spa services and products only – not redeemable for cash.
At your discretion, gratuities are gratefully accepted by our therapists. Gratuities can be paid in cash or credit card at the reception desk.
Please advise us of any health conditions, allergies, or injuries, which could affect your treatment when making your spa reservation.
We accept cash, all major credit cards and our gift certificates. However, we do not accept personal checks.
We highly recommend booking your treatment in advance to ensure that your preferred time and service is available. A credit card is required at the time of booking to secure all appointments. However, we also welcome walk-ins. Our professional team of staff is available to guide and assist you in selecting the most suitable treatment for you.
All spa treatments and membership are non-refundable and non-transferable.
Smoking and consumption of alcohol in the spa are prohibited.
To continue your spa regimen at home, all products used in the treatments and services are available in our Spa Boutique.
We recommend that you leave your valuables at home. We regret that we cannot be responsible for any lost, damaged or stolen personal articles.


The trend has been steady and clear – e-commerce is no longer on the sidelines. Shopping online has become mainstream. If you're aren't attempting to build your business online, then you aren't trying to build your business. The infographic below outlines the leaps and bounds that have taken place in the arena of e-commerce during the last five years. If you haven't joined the movement yet, now is the time….


text:
most mined mineral in zimbabwe
Zimbabwe: Mining Speculators Invade Great Dyke
This effectively gives them control of vast swathes of some of the most lucrative mineral concessions in Zimbabwe The Great Dyke hosts huge ore deposits, including gold, silver, chrome, platinum ....
Blanket Gold Mine
Zimbabwe has a long history of mining and there are known occurrences of over 40 minerals in Zimbabwe, mainly gold, nickel and copper but also including coal, diamonds, PGE's and chromite The Zimbabwean mining industry has operated for over 100 years and prior to the collapse of the economy from 2005 onwards, there was a well-established base ....
most mined mineral in zimbabwe Get more about this About Us , South Africa Zimbabwe look for mining revival under for mining revival under new leaders in South Africa and Zimbabwe two of the most mineral-rich More Moti Group is open to selling shares in Zimbabwe mine...
Mining industry of South Africa
Mining in South Africa was once the main driving force behind the history and development of Africa's most advanced and richest economy Large-scale and profitable mining started with the discovery of a diamond on the banks of the Orange River in 1867 by Erasmus Jacobs and the subsequent discovery and exploitation of the Kimberley pipes a few years later...
Opening New Mines
Overview Opening a new mine is an expensive, time-intensive process Most mines must operate for years to cover initial start-up costs; therefore, they are only opened after careful market analysis...
list of gold mines in zimbabwe
BINQ Mining >Mining Equipment >list of gold mines in zimbabwe; Print list of gold mines in zimbabwe Posted at:December 25, 2012[ 45 - 3486 Ratings] Zimbabwe Mining, Zimbabwe Diamonds, Zimbabwe Mining News, Zimbabwe , The most important minerals produced by Zimbabwe include gold ....
The top ten deepest mines in the world
Eight of the ten deepest mines in the world reside in a particular region of South Africa, while the remaining two - Kidd Creek and Creighton - are both located in Ontario, Canada Mining-technology profiles the top ten deepest mines in the world...
10 African Minerals of Highest Economic Value
Gold which ranks among the top 10 most valuable minerals in the world is mined in several countri These include South Africa, Tanzania, Ghana, Burkina Faso, Mali, Guinea and many other countri South Africa is largest producer in the world and also the strongest economy in the continent...
Uranium in Africa
Uranium in Africa (Updated November 2017) Africa has considerable mineral deposits, including uranium Exploration and mine development is proceeding in countries which have ,...
Zim mining hubs turn into ghost towns
Zimbabwe, with its rich mineral deposits along the Great Dyke belt, attracted a large number of investors who wasted no time in creating mining towns along the dyke One such town is Mvuma, 192 km south of Harare along the Harare-Masvingo highway, where the once thriving Athens Mine, formerly Falcon Mine owned by Lonrho Zimbabwe, is situated...
The 10 Biggest Platinum Producers
The Kroondal and Mimosa mines are, respectively, located in the Bushveld Complex in South Africa and Great Dyke in Zimbabwe Ore is sent to two metallurgical concentrator plants situated on the property, which have a combined monthly capacity of 570,000 tons...
Where Are Diamonds Mined? Countries That Produce ,
Since the 1870s, most of the world's gem-quality diamonds have been mined in Africa The diamond production map above shows countries with at least 50,000 carats of natural gem-quality diamond production The map illustrates that diamond production has spread to many parts of the world Diamond ....
Marange diamond fields
The Marange diamond fields are an area of widespread small-scale diamond production in Chiadzwa, Mutare West, Zimbabwe 'Although estimates of the reserves contained in this area vary wildly, some have suggested that it could be home to one of the world's richest diamond deposits' [1]...
List of diamond mines
There are a limited number of commercially available diamond mines currently operating in the world, with the 50 largest mines accounting for approximately 90% of global supply Diamonds are also mined alluvially over disperse areas, where diamonds have been eroded out of the ground, deposited, and concentrated by water or weather action...
Why Zimbabwe shut down its diamond mines
Mar 03, 2016· Zimbabwe is trying to take full control of its diamond min Last month, the government ordered the companies operating all but two of the country's mines to ,...
Prev: general manager konongo gold mines
Next: saree roll press machine
stone crushure machinery manufacturers
impact crusher max feed size 102 mm site break da com
equipments for small scale diamonds mins


Orlando, Florida (June 2, 2015) — This week at IPW—the travel industry's premier international marketplace—NYC & Company, the City's marketing and tourism organization, is highlighting the "new" New York City and sharing details of significant new New York City openings and developments that are transforming the City's tourism landscape.
At a press conference this morning at Orlando's Orange County Convention Center, NYC & Company president and CEO Fred Dixon and Senior Vice President of Global Communications Chris Heywood were accompanied by representatives of the One World Observatory, which was unveiled last week in Lower Manhattan (May 29); the Whitney Museum of American Art, opened on May 1 in Manhattan's Meatpacking District; and the New York Wheel and Empire Outlets, debuting 2016-17 in St. George, Staten Island.
In addition, NYC & Company today announced its first-ever bilingual family tourism campaign starring Dora as the City's newest Official NYC Family Ambassador. In 2014, the City welcomed an estimated 17.2 million family visitors, a 3 percent increase from the year before. Starting today on nycgo.com/family, Dora will encourage family travel with kid-friendly NYC travel materials, guides and itineraries in both English and Spanish.
NYC & Company also today rolled out its latest NYCGO Insider Guide, featuring Brooklyn's Coney Island, the perfect summer travel destination. As part of the neighborhood promotion, the legendary amusement district is highlighted in a short documentary featuring locals who recommend the neighborhood's must-visit attractions, restaurants, shops and more on nycgo.com/insiderguides.
Directly following today's press conference, NYC & Company will host its fourth consecutive IPW Luncheon, NYC Center Stage, in conjunction with Broadway Inbound. The event, hosted by David Hyde Pierce, will showcase live performances by the casts of Aladdin, The Book of Mormon, Fiddler on the Roof, The Lion King, Matilda the Musical and On the Town.
Since 2006, international travel to New York City has increased by more than 67 percent, from 7.3 million visitors in 2006 to 12.2 million last year. Last year, the City welcomed an overall all-time record 56.4 million visitors. In March, 2014, NYC & Company announced the path to the next 10 million visitors, with a new tourism target of 67 million annual visitors by 2021. This year, NYC & Company is forecasting 58.1 million visitors.
With unrivaled offerings, New York City remains a must-see destination for visitors, no matter their interests. From outdoor activities to shopping developments, there is something for everyone to enjoy. NYC & Company campaigns such as "Welcome to New York" featuring Taylor Swift as the City's Global Welcome Ambassador as well as the newly launched "Hello Summer" program spotlighting the City's five boroughs as a summer travel destination continue to create urgency for visitors to book and visit New York City.
During IPW, NYC & Company is joined by 14 New York City travel industry partners including The New York Pass; Top of the Rock & Rockefeller Center; Heartland Brewery; the Whitney Museum of American Art; TravelAdvocates; Bridgeton Holdings; Alliance for Downtown New York; BR Guest Hospitality; The Shops at Columbus Circle; NYC Airporter; Carnegie Hall; One World Observatory; Patina Restaurant Group; and Hotel Edison.


THE TOP DOGS OF DOWNING STREET: Not political masters but rather Rex and Oscar, chancellor Philip Hammond's dogs, on Instagram via the 'Terrier About Town' account, which appears to be run by Hammond's wife Susan Williams-Walker.
2017 WILL BE EUROPE'S TURNING POINT … BUT WHICH WAY WILL IT TURN? Florian Eder looks at the key forks in the European political road for the year ahead. On the EU institutional front the year kicks off with an open race for Parliament president, and it will indicate what political life will be like in the post-Juncker and Schulz bromance era. The policy battles will center on whether to abandon austerity and how to balance security and liberty.
The EU also sets off the new year determined to hang tough on Brexit. It "successfully played hardball with Switzerland's direct democracy and won," writes Eder, as a reminder that even if the U.K. hasn't moved to trigger Article 50, the EU itself has moved well beyond Brexit rhetoric and into action.
WINNERS AND LOSERS OF 2017: Quentin Letts returns to POLITICO's pages with his crystal ball. Next year's winners will include Vladimir Putin, Theresa May and gold leaf dealers (courtesy of the Trumps, of course), while the losers will be NATO, François Hollande's hairdresser and London's judges, among others.
COMMISSION — GAZPROM MOVES TO SETTLE ANTITRUST CASE WITH OFFER: The settlement offer "demonstrates our willingness to address within the established procedure the relevant concerns of the European Commission related to the gas market issues, to the extent it is reasonable and possible," said Alexander Medvedev, deputy chairman of Gazprom's management committee. The Commission accused the Russian gas giant of using its market power to bully and overcharge European governments and companies. "We hope that the Commission — and ultimately the markets — will respond positively to our proposal," Medvedev said.
A weak Europe is not prepared for what 2017 will bring, argues Judy Dempsey on the same Washington Post op-ed page as Darroch's piece above.
The Times has an interesting podcast looking back at the year that was in Westminister, featuring Red Box's Matt Chorley and Tim Shipman. h/t Henry Taylor.
WEAPONS — US SOLD $40BN IN ARMS IN 2016, HALF OF ALL GLOBAL SALES: United States sales "represented half of all agreements in the worldwide arms bazaar, a study has found. The biggest buyers of weapons globally were Qatar, Egypt and Saudi Arabia." France finished a clear second.
SECURITY QUESTION OF THE DAY: How did Anis Amri, Europe's most wanted man (for his role in the Berlin Christmas market attack), enter France unchallenged, and also escape it, during a state of emergency?
ROMANIA — CONSTITUTIONAL STAND-OFF LOOMS AS PRESIDENT REJECTS PM CANDIDATE: Romanian President Klaus Iohannis on Tuesday rejected Sevil Shhaideh's groundbreaking candidacy for prime minister without offering a precise explanation. Shhaideh, who is Muslim, female and from the Tatar ethnic minority, was put forward for the job by a parliamentary majority coalition made up of Social Democrats and Liberals.
The Social Democrats, who handily won a recent national election, have said they will not put forward another candidate, reports Carmen Paun. Their leader Liviu Dragnea can't take the job himself because of a two-year suspended jail sentence in April for attempting to rig a referendum. "No one can impose a nomination to the president," Iohannis told POLITICO in October.
ITALY — MONTE DEI PASCHI TO GET €6.5 BILLION, MORE THAN PREVIOUSLY THOUGHT: "Italy is planning to inject around €6.5 billion into Monte dei Paschi di Siena, officials said on Tuesday, after the European Central Bank estimated the country's third-largest bank had a larger capital shortfall than was thought," writes James Politi. The bank may need as much as €8.8 billion.
PLAYBOOK HEARS … Persistent terrible traffic due to Trump Tower security is forcing wealthy New Yorkers to take the subway to get from downtown to the Upper East Side. From the earful Playbook received about it ("it took me 90 minutes to get from SoHo to the Upper East last week!"), the 1 percent will take a while to adjust to their new subterranean future.
RUSSIA — AS SEEN ACROSS EUROPE: A useful color-coded and country-by-country guide to how Europeans feel about Russia.
US AND JAPAN — SYMBOLIC MEETING AT PEARL HARBOR MEMORIAL: Seventy-five years after the Japanese attacks on the United States navy, Japan's Prime Minister Shinzō Abe has joined U.S. President Barack Obama at the site of the attacks to mark the peaceful friendship of the two nations.
MOLDOVA — MPs BATTLE TO RESTORE EU FLAG TO PARLIAMENT: Members of Moldova's parliament have re-hung an EU flag over the entrance to the country's presidential office after new pro-Russia President Igor Dodon had it removed over the Christmas period.
ARGENTINA — FORMER PRESIDENT INDICTED: Former Argentine President Cristina Fernandez was indicted Tuesday in a corruption case involving public works.
NATO — AUDITOR GENERAL DEATH A SUICIDE: High-ranking NATO official Yves Chandelon, whose body was found in his car in the Belgian town of Andenne on December 16, killed himself, the chief prosecutor in charge of the case said.
NEW IN POST: Former MEP Pablo Zalba, who left Parliament in November, has now taken office as chairman of Spanish Promotional Bank Instituto de Crédito Oficial, a state-owned bank attached to the Ministry of Economic Affairs, Industry and Competitiveness. Zalba, from the EPP, was vice chair of Parliament's ECON Committee.
A sportscaster's secret mission to save a Jewish family at the Nazi Olympics in 1936.
Voters and the media often don't understand each other. It's one of the most valuable lessons from 2016, writes Callum Borchers.
TIMMERMANS AT THE HELM: Vice President Frans Timmermans is in charge of the European Commission from today as others take their Christmas and New Year breaks.
MPs TO DELIVER BRUSSELS ATTACKS RECOMMENDATIONS IN MARCH 2017: They plan for the report to be "bulky" and have noted police now use WhatsApp to avoid the city's troubled telephone networks.
TRENDING IN BRUSSELS — HOLIDAYS WITHOUT OUT-OF-OFFICE AUTO-REPLY MESSAGES: Most days when we send out Playbook, about 1,000 'out of offices' messages are sent back. Not so this week. Despite it being Christmastime, the number of messages drastically dropped on Monday and Tuesday, the first time we've seen such a drop.
MULTIPLIER EFFECT: Siobhan Millbright, who works on the EU's investment plan at the European Commission, and her husband Gregor, are now proud parents to Charlotte Amber Millbright.
DIED: The actress Carrie Fisher, most famous for her Star Wars roles over three decades.
BIRTHDAYS: Tadeusz Zwiefka MEP; Bram Delen, from the team of Guy Verhofstadt. European Commission's Raquel Cortes Herrera.
This article has been updated to correct the spelling of Philip Hammond's name.


text:
package com.itheima.audiocontrol;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.widget.Toast;

public class MyWidgetProvider extends AppWidgetProvider {

	private SharedPreferences system_config;

	@Override
	public void onReceive(Context context, Intent intent) {
		super.onReceive(context, intent);
	}

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {

		context.startService(new Intent(context, WidgetService.class));
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}

	@Override
	public void onEnabled(Context context) {

		system_config = context.getSharedPreferences("system_config",
				Context.MODE_PRIVATE);

		system_config.edit().putBoolean("isWidgetRuning", true).commit();

		// Toast.makeText(context, "onEnabled小窗口部件已经创建了", 0).show();

		context.startService(new Intent(context, WidgetService.class));
		super.onEnabled(context);
	}

	@Override
	public void onDisabled(Context context) {
		system_config = context.getSharedPreferences("system_config",
				Context.MODE_PRIVATE);

		system_config.edit().putBoolean("isWidgetRuning", false).commit();

		context.stopService(new Intent(context, WidgetService.class));
		super.onDisabled(context);
	}

}


Nemir Kirdar has lived Iraq's history. From the country of his youth – a stable and vibrant land of great promise, to the 1958 coup that plunged Iraq into a period of terror and destruction, foreign occupation, and the fall of Saddam Hussein, he's been uniquely placed to comment on events and propose solutions.
Now Kirdar shares his vision for tomorrow's Iraq, providing a blueprint for political, economic and social renewal. Calling for Iraqis to rise up and unlock their nation's potential, Kirdar affirms that Iraq can again be unified. SAVING IRAQ is a personal account but also a book of global significance, offering steps towards resolution in a shattered country.


Choosing OGPAL for the nearly one-decade experience that we possess in in-game-service providing to make sure that all pieces of League of Legends Boosting and our high-quality services you will have bought represent our sincerity towards every single client. The payment made for each order of League of Legends Boosting will be 100% secured and guaranteed. What's more, League of Legends Boosting are dispatched in really short period, just take a brief time and that's it!
100% trade safety is by all means supported. Powered by OGPAL, all transactions of League of Legends Boosting go smoothly and reliably. If you have any question regarding your order of League of Legends Boosting, our team is of course at any time at your disposal to help you.


text:
How Yield To Maturity Is Calculated
Calculating Yield to Maturity
Yield to Maturity (YTM), also called book yield or redemption, is the hypothetical interest rate or rate of return of a bond and other fixed-rate securities.
The YTM is based on the assumption or interpretation that an investor buys the security at its present market price and keep it until it has matured or attained its maximum value and interest and coupon payments are always on time.
YTM is usually indicated as an annual percentage rate (APR) and calculated using the following formula:
YTM = [C + (FV – PV)/t]/[(FV + PV)/2]
C – Interest/coupon payment
FV – the security's face value
PV – the security's current value/price
t – number of years for the security to mature
The formula is meant to find out the yield of fixed-asset security, such as a bond, as per its latest market price. The process for calculating YTM is designed to show, through compounding, how much a security's effective yield must be when it matures.
It is not the same as simple yield, which also determines a security's expected yield upon maturity, not by compounding but according to dividends.
Estimated Yield to Maturity
When using the formula above, it is crucial to know that it is only helpful for estimating YTM. That means the value is not absolute and prone to inaccuracies.
Trial and error is the most accurate way to find out the actual YTM. However, as the process can be lengthy, most investors rely on software that automatically narrows down possible YTM's instead. This allows them to arrive at high-quality results while ensuring efficiency, which is not possible through manual computations.
Yield to Maturity Variations
Yield to Maturity can come with different variations for multi-option bonds. For example, Yield to Call (YTC) is based on the belief that the bond will be "called," meaning, reacquired by the issuer before maturity and thus with a shorter duration of cash flow.
The YTC value is calculated based on the premise that the issuer will buy the bond back as soon as possible or when it is financially viable.
Another variation is Yield to Put (YTP), which is almost the same as YTC, the difference being the put bondholder having the option to return the bond to the issuer at a fixed price according to its terms. The YTP value is determined by the belief that the issuer will regain the bond once possible and financially viable.
The third type of YTM is known as Yield to Worst (YTW), which is used for bonds that offer various options. Let's say an investor is assessing a bond with both Call and Put provisions. The YTW calculation will be based on the option terms offering the least yield.
Limitations of Yield to Maturity
Taxes paid on bonds aren't usually included in YTM calculations. Hence, the value is considered the gross redemption yield. These calculations do not factor in the buying or selling costs, and there is no way of knowing beforehand any assumptions on the future.
There is also no option for the investor to reinvest all coupons or hold them to maturity, and the issuer can default on the bond.
Yield to Maturity vs. Coupon Rate
Before purchasing bonds, investors not only have to look into the YTM but also the equally crucial coupon rate. Investment-quality bonds are considered low-risk and usually have a rate of return slightly greater than what typical savings accounts offer.
Because they are fixed-income investments, investors often use them as a constant source of income upon retirement. However, anyone, regardless of age, can introduce bonds to their portfolios to improve their general risk profile.
To reiterate, Yield to Maturity is the percentage return rate of a bond, given that the investor will not dispose of the asset into maturity. It is the total of all standing coupon payments. A bond's YTM goes up or down, dictated by its market value and the number of payments remaining. On the other hand, the coupon rate is the amount of interest that must be paid annually to the bond's owner. Another way of understanding the coupon rate is by looking at it as the bond's yield.
In general, a bond investor will more probably decide according to the coupon rate of an instrument, while a bond trader will more likely be interested in its YTM. Also, as far as an individual bond investor is concerned, the coupon payment is the profit generator. For the bond trader, however, a gain or loss is possible due to the bond's market price variations.
Additionally, the Yield to Maturity calculation combines the likely profits or losses caused by the said market price fluctuations. If an investor buys a bond at par or face value, the YTM equals the coupon rate.
If the bond is purchased with a discount, its coupon rate will be lower than its YTM. Bonds that are bought at a premium have their YTM's lower than their coupon rates.
A bond's YTM is its average return for the rest of its life. A single discount rate is introduced to the calculations of future payments, making the current value more or less the same as the price of the bond. This method requires several considerations:
Length of time before the bond matures
Coupon rate
Discrepancy between face value and price
Essentially, the Yield to Maturity is the return rate on a bond's current value for its combined future cash flow. It needs to equal its present market price, and it's based on the belief that all coupon payments are invested back at a yield equivalent to the YTM. Also, it assumes the owner will keep the bond until it matures.
There are many types of bond investments, such as treasury, municipal and foreign bonds. Some are purchased through the government, such as treasury and municipal bonds, while others are acquired through brokerages.