text:
This tutorial introduces you to the concepts of working with
`Microsoft.Diagnostics.Runtime.dll` (called 'ClrMD' for short), and the
underlying reasons why we do things the way we do. If you are already familiar
with the dac private API, you should skip down below to the code which shows you
how to create a `ClrRuntime` instance from a crash dump and a dac.

## CLR Debugging, a brief introduction

All of .NET debugging support is implemented on top of a dll we call "The Dac" (usually named `mscordacwks.dll`).  This library is the building block for our private debugging APIs which should not be directly used.  The dotnet runtime team has implemented several public APIs using these private ones for anyone to consume.  This includes the ClrMD library, which is a process and runtime inspection API as well as `ICorDebug`, the official debugger API for CLR.  Note that ClrMD is not a debugging api and does not support setting breakpoints, stepping, and so on.

## What do I need to debug a crash dump with ClrMD?

As mentioned before, all .NET debugging is implemented on top of the Dac. To debug a crash dump or live process, all you need to do is have the crash dump and matching `mscordacwks.dll`. Those are the only prerequisites for using this API.

The correct dac for a particular crash dump can be obtained through a simple symbol server request. See the later Getting the Dac from the Symbol Server section below for how to do this.

There is one other caveat for using ClrMD though: ClrMD must load and use the dac to do its work. Since the dac is a native DLL, your program is tied to the architecture of the dac. This means if you are debugging an x86 crash dump, the program calling into ClrMD must be running as an x86 process. Similarly for an amd64 crash dump. This means you will have to relaunch your tool under wow64 (or vice versa) if you detect that the dump you are debugging is not the same architecture as you currently are.

## Loading a crash dump

To get started the first thing you need to do is to create a `DataTarget`. The `DataTarget` class represents a crash dump or live process you want to debug. To create an instance of the `DataTarget` class, call one of the static functions on `DataTarget`.  Here is the code to create a `DataTarget` from a crash dump:

```cs
using (DataTarget dataTarget = DataTarget.LoadDump(@"c:\work\crash.dmp"))
{
}
```

The `DataTarget` class is designed to give you a whole view of the process with some limited data about what modules (both managed and native) are loaded into the process.  It's main use though is to enumerate what instances of the CLR runtime are loaded into the process and using that information to create `ClrRuntime` instances.

To enumerate the versions of CLR loaded into the target process, use `DataTarget.ClrVersions`:

```cs
foreach (ClrInfo version in dataTarget.ClrVersions)
{
    Console.WriteLine("Found CLR Version: " + version.Version);

    // This is the data needed to request the dac from the symbol server:
    DacInfo dacInfo = version.DacInfo;
    Console.WriteLine("Filesize:  {0:X}", dacInfo.IndexFileSize);
    Console.WriteLine("Timestamp: {0:X}", dacInfo.IndexTimeStamp);
    Console.WriteLine("Dac File:  {0}", dacInfo.PlatformSpecificFileName);

    // If we just happen to have the correct dac file installed on the machine,
    // the "LocalMatchingDac" property will return its location on disk:
    string dacLocation = version.DacInfo.LocalDacPath;
    if (!string.IsNullOrEmpty(dacLocation))
        Console.WriteLine("Local dac location: " + dacLocation);

    // Note that you can also simply download the dac from the symbol server
    // which is usually done automatically for you.  This will be covered more
    // later.
}
```

Note that `dataTarget.ClrVersions` is an `ImmutableArray<ClrInfo>`. We can have multiple copies of CLR loaded into the process in the side-by-side scenario such as having a copy of the desktop CLR loaded and .Net Core loaded into the process at the same time.

The next step to getting useful information out of ClrMD is to construct an instance of the `ClrRuntime` class.  This class represents one CLR runtime in the process.  To create one of these classes, use `ClrInfo.CreateRuntime` and you will create the runtime for the selected version:

```cs
ClrInfo runtimeInfo = dataTarget.ClrVersions[0];  // just using the first runtime
ClrRuntime runtime = runtimeInfo.CreateRuntime();
```

Note that we did not specify the location of the dac library when calling here.  ClrMD will default to looking at the `LocalDacPath` and use it if it is non-null.  If the `_NT_SYMBOL_PATH` environment variable is set we will also check the symbol servers listed for a matching dac.  To use the Microsoft symbol server you can set `_NT_SYMBOL_PATH=https://msdl.microsoft.com/download/symbols`.

You can also create a runtime from a dac location on disk if you know exactly where it is:

```cs
ClrInfo runtimeInfo = dataTarget.ClrVersions[0];  // just using the first runtime
ClrRuntime runtime = runtimeInfo.CreateRuntime(@"C:\path\to\mscordacwks.dll");
```

## Getting the Dac from the Symbol Server

When you call CreateRuntime without specifying the location of mscordacwks.dll, ClrMD attempts to locate the dac for you.  It does this through a few mechanisms, first it checks to see if you have the same version of CLR that you are attempting to debug on your local machine.  If so, it loads the dac from there.  (This is usually at c:\windows\Framework[64]\[version]\mscordacwks.dll.)  If you are debugging a crash dump that came from another computer, you will have to find the dac that matches the crash dump you are debugging.

All versions of the dac are required to be on the Microsoft public symbol server, located here:  https://msdl.microsoft.com/download/symbols.  The DataTarget.SymbolLocator property is how ClrMD interacts with symbol servers.  If you have set the _NT_SYMBOL_PATH environment variable, ClrMD will use that string as your symbol path.  If this environment variable is not set, it will default to the Microsoft Symbol Server.

With any luck, you should never have to manually locate the dac or interact with DataTarget.SymbolLocator.  CreateRuntime should be able to successfully locate all released builds of CLR.

However, if you have built .Net Core yourself from source or are using a non-standard build, you will have to keep track of the correct dac yourself (these will not be on the symbol servers).  In that case you will need to pass the path of the dac on disk to ClrInfo.CreateRuntime manually.

## Attaching to a live process

CLRMD can also attach to a live process (not just work from a crashdump). To do this, everything is the same, except you call `DataTarget.AttachToProcess` instead of `DataTarget.LoadCrashDump`. For example:

```cs
DataTarget dataTarget = DataTarget.AttachToProcess(0x123, suspend: true);
```

The first parameter is the process id to attach to.  The second parameter tells ClrMD whether or not to suspend the target process when it attaches to the process.  Note that ClrMD **only** support inspecting a suspended process or a crash dump, we do *not* support inspecting a running process.  The reason we allow you to specify whether to suspend the process or not is so that diagnostic tool developers can do process suspension themselves without ClrMD interfering with that.

If you need to inspect a running process (or your own process) the only supported way to do this is to create a snapshot of the running process using `CreateSnapshotAndAttach` and inspect that snapshot instead.  Note that on Windows we use the PssCreateSnapshot api which will only leave process suspended a relatively short amount of time.  On Linux and OS X we have no such API to use, so we will create a temporary coredump from the live process and this may take significantly longer.

For example, this is how you would create a DataTarget capable of inspecting your own process.  Note that the target process will be left suspended for only the duration of the call to `CreateSnapshotAndAttach`.

```cs
using DataTarget dt = DataTarget.CreateSnapshotAndAttach(Process.GetCurrentProcess().Id);
```

Lastly, you should always be sure to dispose of the `DataTarget` instances you create.  If you do not call `DataTarget.Dispose` we may leave processes in suspended states, or we could leave behind temporary files on disk that we would otherwise have deleted.

# ClrRuntime, the core of ClrMD

## Introduction

The `ClrRuntime` object itself represents the data for a single version of CLR loaded into the process.  This is the "root" object that you will be working with most of the time when using ClrMD.  Please note that `ClrRuntime` is marked as `IDisposable`, so please be sure to call `Dispose` when you are finished using it.

This object allows you to inspect a wide variety of CLR constructs:  The handle table, the GC heap, the AppDomains loaded into the process, the loaded modules, and so on.  We'll be covering some of the caveats and gotchas of using the class in this section.

## AppDomains

### Enumerating AppDomains

To walk AppDomains in the process, simply use the `ClrRuntime.AppDomains`
property:

```cs
ClrRuntime runtime = ...;
foreach (ClrAppDomain domain in runtime.AppDomains)
{
    Console.WriteLine("ID:      {0}", domain.Id);
    Console.WriteLine("Name:    {0}", domain.Name);
    Console.WriteLine("Address: {0}", domain.Address);
}
```

You can see the modules loaded for each `ClrAppDomain` instance via the `Modules` property:

```c#
foreach (ClrModule module in domain.Modules)
{
    Console.WriteLine("Module: {0}", module.Name);
}
```

ClrRuntime also contains a helper method `EnumerateModules` which will walk all domains and enumerate all of their modules.  **Note:** ClrModule represents a single module loaded into an AppDomain.  This means that if there are three AppDomains loaded into the process and each AppDomain loads the "foo.dll" module, then `ClrRuntime.EnumerateModules` will enumerate three different instances of `ClrModule`, each of which representing "foo.dll".

## Threads

Similar to `ClrRuntime.AppDomains`, there is a `ClrRuntime.Threads` property, which holds the current list of all managed threads in the process.

The `CLRThread` class contains data such as: The address of the thread object, the AppDomain which the topmost frame is running in, the last thrown exception on that thread, a managed stack trace of the thread, the stack base and limit of the thread, and so on.

The most interesting of which is stack walking, so we'll start there.

### Walking the stack

You can walk the managed stack of any thread in the process by simply enumerating the `ClrThread.StackTrace` property. Here's an example of printing out the call stack for each thread in the process:

```cs
foreach (ClrThread thread in runtime.Threads)
{
    if (!thread.IsAlive)
        continue;

    Console.WriteLine($"Thread {thread.OSThreadId:x}:");

    foreach (ClrStackFrame frame in thread.EnumerateStackTrace())
        Console.WriteLine($"    {frame.StackPointer:x12} {frame.InstructionPointer:x12} {frame}");

    Console.WriteLine();
}
```

Note that to get the class/function name of a given stack frame, calling `ClrStackFrame.ToString` will give you output roughly equivalent to SOS's `!ClrStack`.

### Caveats

There are a few caveats to `ClrThread` objects which you should be aware of:

First, we only create `ClrThread` objects (internally this is the `clr!Thread` object in `clr.dll`) for threads which have run managed code, or might soon run managed code. This means that there is NOT a 1-1 mapping of all threads in the process to a `ClrThread` object. If a thread has never run managed code before, chances are there's not a `ClrThread` for it.

Second, we keep these `clr!Thread` objects around for a short while after the actual underlying OS thread has died. Since `ClrThread` is basically a wrapper around `clr!Thread`, we expose that out here. The `ClrThread.IsAlive` property tells you whether a thread is alive (meaning the thread is still active and
running in the process) or dead (the underlying OS thread has been terminated and thus this thread is no longer running anymore).

Third, there are many cases where we cannot get a complete managed stack trace.  Without getting into too much detail here, the process could have been stopped in a state where our stackwalker gets confused and cannot properly walk the managed stack. However, you are guaranteed the same results that SOS gets in
this case, so it should not be too bad.

Fourth, you will notice that there is an `AppDomain` property on `ClrThread`.  This is the AppDomain in which the topmost frame of the stack is running in, not what every stack frame is running in. The Dac private API is limited in that it cannot give us per-frame AppDomain information, so ClrMD cannot give you that information.

## Enumerating GC Handles in the Process

The last thing we will cover in this tutorial is how to walk the GC Handle table. A GC Handle consists of three basic building blocks: An object, a handle which can be used to refer to this object (without knowing its exact address), and a handle type which specifies how the runtime treats the handle.

Here is an example of walking the GC Handle table and printing out a table of handles and their types:

```cs
foreach (ClrHandle handle in runtime.EnumerateHandles())
{
    string objectType = heap.GetObjectType(handle.Object).Name;
    Console.WriteLine($"{handle.Address:x12} {handle.Object} {handle.HandleKind}");
}
```

### Types of GC Handles

Each handle type is either weak (meaning it does not keep the object alive from the GC's perspective) or strong (meaning as long as the handle exists we will not collect the object). RefCount handles are the exception: They are conditionally strong or weak depending on whether the RefCount is 0, or greater
than 0. You can tell if a particular handle is strong with the `GCHeapHandle.Strong` property.

There are nine handle types, each with a special meaning:
1. **WeakShort** - A weak handle which is meant to be short lived in the
   process.
2. **WeakLong** - A weak handle which is meant to be long lived in the process.
3. **Strong** - A strong handle.
4. **Pinned** - A strong handle which prevents the GC from relocating the
   object.
5. **AsyncPinned** - A strong handle used by async operations. This is also a
   pinning handle, meaning the GC is not allowed to relocate the object this
   points to.
6. **Variable** - An unused handle type. You should never see one of these.
7. **RefCount** - A reference counted strong handle (used for COM interop).
   When the RefCount hits 0 the handle becomes a weak handle.
8. **Dependent** - A weak handle. Please see below.
9. **SizedRef** - A strong handle used by ASP.NET.

The last three, RefCount handles, Dependent handles, and SizedRef handles each have caveats that you should be aware of.

### RefCount Handles

RefCount handles are used for COM interop, and obviously one of the most important things to know about a RefCount handle is the actual refcount itself.  For v4 and v4.5 CLR, we have that data. However, in v2 CLR we did not expose the reference count out through the Dac. This means that if you are debugging a v2 process we do not have a reference count we can give you. The `GCHeapHandle.RefCount` property will always return 1. This means ClrMD always treats RefCount handles as Strong handles in CLR v2. This is mostly true, RefCount handles get cleaned up when their count hits 0. So the only time you would get a false-positive in v2 is if the crash dump was taken after the real ref count hit 0 and before the next GC cleaned it up.

### SizedRef Handles

SizedRef handles are used exclusively by ASP.NET to hold onto caches of objects.  As the GC marks objects it keeps track of what objects the handle keeps alive. When the GC is complete it updates a field on the SizedRef handle which is an estimate of how much memory that object holds onto. This is similar to a
inaccurate `!objsize`.

Unfortunately the Dac does not expose any way to get the size which the SizedRef handle holds onto, so neither does ClrMD.

### Dependent Handles

Dependent handles are a very complicated topic. They were added in v4 as a way to add an edge to the GC graph. A dependent handle consists of the handle address, the object that the handle refers to (I'll call this the "source" object), and a "target" object. A dependent handle keeps the "target" object alive if the "source" object is alive. However, the handle itself is a weak handle, meaning it does not root the "source" object.  Users can create dependent handles through the `System.Runtime.CompilerServices.ConditionalWeakTable` class.

The major caveat here is that dependent handle support was not added to the dac until CLR v4.5. This means that on CLR v4 runtimes, you will know if there are dependent handles in the process, and what the "source" object is, but you cannot get the "target" object unless you are running on CLR v4.5.

All of this is important because if you are attempting to write the equivalent code to `!objsize` or `!gcroot`, you must take dependent handles into account. A dependent handle adds real edges to the graph and needs to be treated as any other object reference to get accurate results.

# The GC Heap

## Introduction to the GC Heap

CLR's GC is a generational, mark and sweep GC. There are 3 generations in the process, gen0, gen1, and gen2. Objects are allocated in gen0, and whenever an object survives a GC they are promoted to the next generation (thus a gen0 object becomes a gen1 object and a gen1 object becomes a gen2 object). The only exception to this rule are large objects. Large objects are allocated directly into gen2 (on a special segment) and are never relocated. An object is considered a "large object" if it takes up more than 85,000 bytes.

There are also two types of GC's: the workstation GC and the server GC. There are two primary differences between a workstation GC and a server GC from a diagnostics standpoint: First, the workstation GC runs on only one thread whereas the server GC runs on multiple threads. Second (and related to the first point), a workstation GC has only one logical heap whereas the server GC has as many logical heaps as there are cores on the machine.

When you make an allocation with the server GC running, the newly allocated object goes into the logical heap associated with the core that thread happened to be running on. In general, the distinction between the two types of GCs does not matter for diagnostics. The only real case where you need to care about the logical heaps in the process is when they become unbalanced... when one heap has had much more allocated on it than other heaps. This can lead to a performance issue where GCs pause the process for longer than it should. (An example of displaying heap balance is shown later.)

Each logical heap in the process has a number of heap Segments associated with them. A segment is a region of memory which contains managed objects. There are three kinds of GC segments:

Ephemeral segments, gen2 segments, and large object segments. There is exactly 1 ephemeral segment per logical heap, and the ephemeral segment contains gen0, gen1, and gen2 objects. When we run out of space on the ephemeral segment, we allocate a gen2 segment and move some (or all) gen2 objects from the ephemeral segment to the new segment. If there's already a gen2 segment for that logical heap, we will continue to move gen2 objects out of the ephemeral segment onto the gen2 segment until we run out of room. There can be any number of gen2 segments per logical heap.

Finally, there are large object segments. When a large object (85,000 bytes or more) are allocated, we allocate this object directly into gen2. We do not, however, use the gen2 segments to do this. Instead we allocate these objects in "large object segments" directly. Large object segments have two main properties: all objects in them are considered gen2 and no object in them may be relocated (we treat objects in these segments as pinned).

## Objects on the Heap

Objects on the target process's GC heap are represented by the `ClrObject` struct.  `ClrObject` instances give you wide range of operations to find out information about the object:

1.  `Address` tells you the address of the object in the target process's address space.
2.  `IsValid` tells you if the object is valid.  This will return false if the address in the target address space did not point to a valid object.
3.  `IsNull` tells you if the object address was null (also `Address == 0` in this case).  Note that null objects are considered valid (`IsNull == true` => `IsValid == true`).
4.  `Type` tells you the type of the object, but note that this field may be null if `IsNull` is true or `IsValid` is false.
5.  `Read*Field` methods allow you to read the instance fields of the class.
6.  `IsArray` and `AsArray` gives you the ability to read from array indicies.
7.  `IsException` and `AsException` let you retrieve specific information about exception objects.
8.  And more.

If you have the address of an object in the target address space, you can create a `ClrObject` for that address by calling `ClrHeap.GetObject(address)`.

## Getting the Heap and Walking Segments

The `ClrRuntime` object has a property called `Heap`, which returns a `ClrHeap` object. The `ClrHeap` object, among other things, allows you to walk each segment in the process. Here's a simple example of walking each segment and printing out data for each segment:

```c#
ClrRuntime runtime = ...;
foreach (ClrSegment segment in runtime.Heap.Segments)
{
    string type;
    if (segment.IsEphemeralSegment)
        type = "Ephemeral";
    else if (segment.IsLargeObjectSegment)
        type = "Large";
    else
        type = "Gen2";

    Console.WriteLine($"{type} object range: {segment.ObjectRange} committed memory range: {segment.CommittedMemory} reserved memory range: {segment.ReservedMemory}");
}
```

As you can see, each `ClrSegment` object gives you `ObjectRange` which is the range of memory that contains objects as well the committed and reserved memory ranges for every segment.

Note that the `ClrSegment.LogicalHeap` is actually the logical GC Heap to which the segment belongs. Here is a simple linq query which will print out a table showing logical heap balance:

```c#
foreach (var item in from seg in heap.Segments
                        group seg by seg.LogicalHeap into g
                        orderby g.Key
                        select new
                        {
                            Heap = g.Key,
                            Size = g.Sum(p => (uint)p.Length)
                        })
{
    Console.WriteLine($"Heap {item.Heap} {item.Size:n0} bytes");
}
```

## Walking Managed Objects in the Process

You can walk all objects on a segment by calling `ClrSegment.EnumerateObjects`, but you don't have to enumerate every segment just to enumerate objects, we also implement `ClrHeap.EnumerateObjects` which enumerates every object on every segment.  Here is an example of walking each object on each segment in the process and printing the address, size, generation, and type of the object:

```c#
ClrRuntime runtime = ...;

if (!runtime.Heap.CanWalkHeap)
{
    Console.WriteLine("Cannot walk the heap!");
}
else
{
    foreach (ClrSegment seg in runtime.Heap.Segments)
    {
        foreach (ClrObject obj in seg.EnumerateObjects())
        {
            // If heap corruption, continue past this object.
            if (!obj.IsValid)
                continue;

            ulong objSize = obj.Size;
            int generation = seg.GetGeneration(obj);
            Console.WriteLine($"{obj} {objSize} {generation}");
        }
    }
}
```

There are two parts in this example you should pay attention to. First is checking the `ClrHeap.CanWalkHeap` property. This property specifies whether the process is in a state where you can reliably walk the heap. If the crashdump was taken during the middle of a GC, the GC could have been relocating objects. At which point a linear walk of the GC heap is not possible. If this is the
case, `CanWalkHeap` will return `false`.

Second, you need to check whether objects returned from `EnumerateObjects` are valid. `ClrSegment.NextObject` does not attempt to detect heap corruption, so it is possible we will return an object where `ClrObject.IsValid` is false.

## Walking objects without walking the segments

```csharp
CLRRuntime runtime = ...;

if (!runtime.Heap.CanWalkHeap)
{
    Console.WriteLine("Cannot walk the heap!");
}
else
{
    foreach (ClrObject obj in runtime.Heap.EnumerateObjects())
    {
        // If heap corruption, continue past this object.
        if (!obj.IsValid)
            continue;

        ulong objSize = obj.Size;
        int generation = runtime.Heap.GetSegmentByAddress(obj).GetGeneration(obj);
        Console.WriteLine($"{obj} {objSize} {generation}");
    }
}
```

The above code's results are equivalent to the one above it but it will be slower due to having to look up the segment the object is in

## A non-linear heap walk

The approach above is a good way to walk every object on the heap. But what if you want to only walk a subset of objects? For example, let's say you have an object and you want to know all of the objects it points to, and all the objects those point to, and so on. This is what we call the `!objsize` algorithm.

If you are not familiar with `!objsize` in SOS, this command takes an object as a parameter and counts the number of objects it keeps alive as well as reports the total size of all objects the given object keeps alive.  Given an object, you can enumerate all objects it points to using `ClrType.Enumerate` object references. Here is an example of implementing this:

```c#
private static (int count, ulong size) ObjSize(ClrObject input)
{
    HashSet<ulong> seen = new HashSet<ulong>() { input };
    Stack<ClrObject> todo = new Stack<ClrObject>(100);
    todo.Push(input);

    int count = 0;
    ulong totalSize = 0;

    while (todo.Count > 0)
    {
        ClrObject curr = todo.Pop();

        count++;
        totalSize += curr.Size;

        foreach (var obj in curr.EnumerateReferences(carefully: false, considerDependantHandles: false))
            if (seen.Add(obj))
                todo.Push(obj);
    }

    return (count, totalSize);
}
```

Note that `EnumerateReferences` takes two arguments:  `carefully` determines whether we ensure the ClrObjects returned are valid or not if there is heap corruption.  Setting this to true causes us to do a lot more checks which will significantly slow down the algorithm.  `considerDependantHandles` tells ClrMD whether or not to look at the dependant handle table and enumerate references kept alive by `ConditionalWeakTable`.

### Why do we need EnumerateRefsOfObject?

You might be wondering why we need `ClrType.EnumerateRefsOfObject` at all. You can attempt to walk each field in the object and get its value to try to implement this algorithm, but `EnumerateRefsOfObject` is much, much faster. It uses the same algorithm the GC does to get object references out of the object, which is far more efficient than walking fields to look for objects.

# Types and Fields in CLRMD

## Introduction

An object's type in ClrMD is represented by `ClrType`. This class has two sets of operations. The first is to provide data about an instance of that type. For example, `ClrType` has functions for getting the length of an array, getting the size of an object, and getting the field values for an object. The second set is operations which tell you about the type itself such as what fields it contains, what interfaces it implements, what methods the type has, and so on.

For most uses of ClrMD you shouldn't need to use `ClrType` directly very often except to get the values of static variables since `ClrObject` has most of the operations you should use for this purpose.

## Basic type information

We'll start with basic operations of a type. There are a few fairly self explanatory functions and properties, such as `ClrType.Name` (the name of the type) and `ClrType.GetSize`, which returns the size of an instance of that type. Note that you must pass in an instance of an object to get its size since there are variable-sized types in CLR. Similarly, `ClrType` has `IsArray`, `IsException`, `IsEnum`, and `IsFree` which tells you if the type is an array of some sort, is a subclass of `Exception`, an `Enum`, or free space on the heap, respectively. (We'll cover free objects in more detail below.)

Another very basic thing that you can do with a type is enumerate the interfaces it implements. Here is an example of doing that:

```c#
ClrType type = ...;
Console.WriteLine($"Type {type.Name} implements interfaces:");

foreach (ClrInterface inter in type.EnumerateInterfaces())
    Console.WriteLine("    {0}", inter.Name);
```

## Getting field values

ClrMD supports obtaining instance and static fields from types.  Note we currently do not support thread static values or context statics because the dac does not give us the proper functions to be able to do this.

To get instance field values, you should use `ClrObject.Read*Field` functions to read values.  For example let's say we define this class and struct:

```csharp
struct Two
{
    public float f;
    public object o2;
}
class One
{
    public int i;
    public object o;
    public string str;
    public Two two;
}
```

Now let's say that `obj` below points to an instance of `One`.  Here's how we would obtain each of the fields in `One` and `Two`:

```csharp
    ClrObject one = ...;

    int i = one.ReadField<int>("i");
    ClrObject o = one.ReadObjectField("o");
    string str = one.ReadStringField("str");
    ClrValueType two = one.ReadValueTypeField("two");

    float f = two.ReadField<float>("f");
    ClrObject o2 = two.ReadObjectField("o2");
```

As you can see, the design of these methods requires you to know what the type of the field is you are requesting at compile time.  If you do not know this information, then you can use `ClrField.ElementType` to find this value.  For example, this statement is true:  `one.Type.Fields.Single(f => f.Name == "i").ElementType == ClrElementType.Int32`.

### "Free" objects

When enumerating the heap, you will notice a lot of "Free objects". These are denoted by the `ClrObject.IsFree` property (also `ClrObject.IsFree == ClrObject.Type.IsFree`).

Free objects are not real objects in the strictest sense. They are actually markers placed by the GC to denote free space on the heap. Free objects have no fields (though they do have a size). In general, if you are trying to find heap fragmentation, you will need to take a look at how many Free objects there are, how big they are, and what lies between them. Otherwise, you should ignore them.

## Getting Methods

Enumerating methods on a type is performed via the `ClrType.Methods` property which returns a list of `ClrMethod` objects for the type.

redpajama_set_name: RedPajamaGithub


text:
Gabriel Boștină (n. 25 mai 1977, Gura Văii, Mehedinți) este un fost fotbalist român, care a jucat pe postul de mijlocaș stânga, dar și central. Se remarca prin tehnică și prin pase decisive, centrări și execuții exacte ale cornerelor. Este cunoscut pentru activitatea de la FC Steaua București, echipă la care a obținut două titluri de campion, o supercupă, o calificare în semifinalele Cupei UEFA și trei calificări consecutive în Liga Campionilor. În septembrie 2007 a urmat transferul la rivala Dinamo București. Ultima echipă pentru care a jucat a fost Universitatea Cluj, fiind căpitanul acesteia și ocupând între timp și funcția de vicepreședinte al echipei.

În perioada 2005-2006 a jucat și pentru Echipa națională a României, în meciurile cu Coasta de Fildeș, Nigeria, Uruguay și Irlanda de Nord

Cariera

Cimentul Fieni și Oțelul Galați (1998-2002)
Gabriel Boștină s-a născut în localitatea Gura Văii, județul Mehedinți la data de 25 mai 1977. A făcut parte dintr-o generație de fotbaliști severineni care i-a dat, printre alții, pe Mirel Rădoi, Flavius Stoican, Florin Șoavă și Dorel Stoica. A început fotbalul ca profesionist la echipa de liga a treia, Severnav Turnu Severin în sezonul 1997-1998, pentru ca, în sezonul următor să se transfere la Cimentul Fieni, unde în urma evoluțiilor bune, este observat de președintele clubului Oțelul Galați, Mihai Stoica. Semnează cu gruparea gălățeană în anul 1999 unde în scurt timp își câștigă locul de titular, sub comanda lui Dumitru Dumitriu, jucând în 33 de partide din sezonul 1999-2000.

Steaua București (2002–2007)
În 2002, odată cu numirea lui Mihai Stoica în funcția de manager general al clubului Steaua București, Gabriel Boștină este adus și el la clubul bucureștean. Evoluțiile sale au fost foarte bune în prima parte a carierei, impresionând spectatorii prin tehnica sa foarte bună și pasele exacte. Până și patronul echipei, George Becali a fost încântat de acesta declarând ca Boștină e mai bun decât Ronaldinho! după meciul Steaua București - RC Lens (Franța), scor 4:0. Primul gol pentru Steaua l-a marcat într-un meci cu Dinamo, în deplasare, câștigat de steliști cu scorul de 4-2. A marcat un gol în preliminariile Cl cu ND Gorica. În turul sezonului 2003-2004 a marcat în meciurile cu FC Brașov, Ceahlăul și Gloria Bistrița. Printre golurile marcate în 2006 se numără golul de 2 la 0 cu Valerenga, meci încheiat cu scorul de 3-1, golul cu Pandurii în deplasare, scor 2-1 și golul superb din meciul cu FC Vaslui.

Sub comanda lui Walter Zenga joacă în 24 de meciuri. Oleg Protasov, l-a folosit în toate cele 15 meciuri din tur, în care a marcat 4 goluri și a oferit 3 pase decisive. În toate sezoanele petrecute la Steaua, Boștină a jucat în total în 117 meciuri, în care a marcat 17 goluri.

Gabriel Boștină intră însă în dizgrația patronului după meciul Middlesbrough - Steaua București, scor 4:2, când este criticat public și acuzat că duce o viață extrasportivă anormală, petrecându-și nopțile prin cluburi alături de portarul Carlos Fernandes.

Dinamo București (2007–2010)
În septembrie 2007 a semnat un contract pentru trei sezoane cu Dinamo București, fiind transferat pe suma de 90.000 de euro. A debutat pentru Dinamo într-un meci cu Poli Iași. A intrat în meciul cu Timișoara din mai 2010 pe postul de fundaș stânga. În 2010, odată cu expirarea înțelegerii, Boștină a părăsit pe Dinamo și s-a alăturat nou-promovatei în Liga I, U Cluj. Gol în șaisprezecimile Cupei României. A jucat în meciul cunoscut sub numele de "Minunea de la Liberec". În următorii 2 ani și jumătate nu a mai marcat pentru câinii roșii, dar o oferit în schimb pase decisive.

În sezonul 2009-2010, Boștină a jucat 38 de meciuri, marcând 2 goluri, cu Universitatea Craiova și CFR Cluj.

U Cluj (2010–2012)
Fiind primul jucător adus de Walter când a preluat U Cluj. Exclus din lot. În meciul Astra - U Cluj a încasat un cartonaș roșu pentru o intrare dură la Takayuki Seto. A luat roșu cu Sportul. 3-0, meciul cu Gaz Metan Mediaș, în Liga I.
Urma să ajungă la FC Drobeta-Turnu Severin, echipă la care s-a antrenat, dar s-a luxat la umăr, accidentare în urma căreia s-a retras din activitate.

La echipa națională
A fost selecționat de Anghel Iordănescu în noiembrie 2006.
Gabriel Boștină a debutat la echipa națională de fotbal a României la data de 12 noiembrie 2005 în "amicalul" Coasta de Fildeș - România, scor 2:1. În total a jucat în 4 meciuri pentru Tricolori, ultimul, împotriva Irlandei de Nord în cadrul turneului de pregătire din Statele Unite ale Americii.

După retragere
După ce s-a retras, a investit într-o cafenea din Drobeta-Turnu Severin. În 2017, s-a implicat în conducerea și pregătirea echipei de ligă județeană Viitorul Șimian, care în 2017–2018 a ieșit campioană a județului Mehedinți, dar nu a reușit să promoveze în Liga a III-a, fiind învinsă de ACS Dumbrăvița la baraj.

Statistică și stil de joc
Până la 26 de ani, era, consform spuselor sale, mai firav și nu obișnuia să facă faza defensivă. Era stângaci.
A contabilizat 38 de meciuri în Cupa UEFA, în care a marcat de două ori, și 12 meciuri în UEFA Champions League, în care a marcat o singură dată. 40 dintre acestea le-a jucat pentru Steaua.

 Total Liga 1: 315 de meciuri - 26 goluri
 Total Liga 2: 30 de meciuri - 9 goluri

După retragere
Colegul său de la Steaua, Nana Falemi, a declarat că era un băiat mai retras, educat, îi plăcea să citească. Dă rar interviuri. Vorbește mai mult de cinci limbi străine. A obținut licența "B" UEFA pentru antrenori. Și-a deschis o cafenea în orașul său natal, Drobeta Turnu Severin, intitulată "Barcelona". Este căsătorit cu și are un fiu.

Note

Legături externe
 Gabriel Boștină pe romaniansoccer.ro
 Gabriel Boștină pe transfermarkt.com
 Știri despre Gabriel Bostina la uefa.com

Nașteri în 1977
Fotbaliști români
Mijlocași
Fotbaliști ai FC Oțelul Galați
Fotbaliști ai FC Steaua București
Fotbaliști internaționali români
Fotbaliști ai FC Dinamo București
Fotbaliști ai Universității Cluj

redpajama_set_name: RedPajamaWikipedia


I wanted to check out the 300mB/s mode and enabled the second antenna according to the instructions.
It seems like the Vocore becomes unstable, I'm basically experiencing the same stuff like described in this post: http://forum.vocore.io/viewtopic.php?f=16&t=3529 - I guess it will just reboot around the point where the wifi driver is started.
This was deemed a power issue, but I've tried a variety of power sources (up to 2.5A) and cables without any luck.
I noticed that if I disconnect the antenna, it's not as unstable and may complete the boot sequence and start the wifi (and I was able to confirm it's in 300mB/s mode), but it will still randomly cut off and reboot.
this is a weird issue. antenna will not effect vocore or anything.
maybe it crosstalk to the chip and interference some kernel module?


Cache Preloading Our cache preloading system ensures that your content is always up-to-date and your website super fast loaded. The number of daily page preloads through our crawler is determined by your license.
Updates No matter what license, updates are always free.
Cron Service No more scheduling errors! Your WordPress tasks, such as publishing scheduled posts or checking for updates, are always executed.
Support Our support usually answers in less than a day.
Simple Setup Just activate Borlabs Cache and your website is faster than before.
Page Caching All of your pages will be cached and delivered in milliseconds. Essential for improving your Search Engine Optimization.
Cache Indexing through Sitemap Build-up the cache index immediately by preloading all URLs of your XML Sitemap.
HTML Minification Borlabs Cache optimizes the filesize of your HTML files through the intelligent removal of HTML comments and whitespaces in the code.
Google Fonts Optimization Multiple Google Fonts requests will be chained into a single request to speed up the loading time.
LazyLoad LazyLoad delays loading of any images outside the visitors view until he scrolls down the page, which improves its load time.
DNS-Prefetching Borlabs Cache supports DNS-Prefetching which allows the browser to load external content faster.
Security Header Management Borlabs Cache supports security header like e.g. Content Security Policy, HSTS, and XSS-Protection.
Cache Exceptions Exclude any page or taxonomy from the cache easily. Borlabs Cache also allows exceptions for specific user agents.
Cache Exceptions per Post Type Exclude any post type from the cache.
Individual Cache Lifetime Define individual cache lifetimes per Post and Archive of all your Post Types.
Individual Cache Lifetime per Post Type Define individual cache lifetimes per Post and Archive for each Post Type separately.
Fragment Caching With Fragment Caching you can have dynamic content in your static files which is useful if you have ads or other data on your pages that should not be static.
Database Optimization Borlabs Cache can clean up your database and reduce its size for better website performance.
CDN Support Borlabs Cache supports most Content Delivery Network services, which reduce HTTP request latency.
Import & Export Save time by easily import or export your favorite settings.
View Cache Get information about each cached pages, easily exclude pages from being cached, or remove them.


Guadalajara is Mexico's second largest city and the cultural center of Western Mexico. Its status as a city was granted by the Spanish King Charles the sixth in 1550 along with a coat of arms that the city has today. The Central Historic district is the oldest section of the city where it was founded and where the oldest buildings are located. They include a combination of religious and civil colonial buildings which are noted for their architectural and historic significance. While the colonial buildings are the most common style of architecture found in the historic district, one can also find examples of Gothic, Baroque, Neo-Classical, Viceregal and Art Deco designs. One of the buildings, the Instituto de Cultural Cabana, is a world heritage site.
From an architectural standpoint, the Templo Expiatory is perhaps the most interesting building in the historic district and its neoclassical style was designed by Manuel Tolsa. Although the cornerstone was laid in 1897, the church is made of stone, carved as it was done in the middle ages.The three tympana on the church's facade are accented with Italian mosaic's created in the Vaticans mosaic factory. Also seen on the facade is a church clock imported from Germany and installed by German technicians along with a carillon of 25 bells which play 25 religious pieces such as Ave Maria. Whenever a musical piece is played, minature statutes of the 12 apostle's rotate in and out of the campanile. Of course a church would not be the same without stained glass and this one has huge stained glass windows created by Jacques and Gerard Degussecau of France. In addition to the musuems and galleries in the historic area, the sites shown in this gallery are the most popular attractions for cultural tourism in Guadalajara.
A Bronze sculpture of Guadalaja's Coat of Arms which symbolizes a fighting spirit and perseverance.
This is the Teatro Dellgado named after the state's govenor when construction of the neoclassical building was completed in 1866.
Fuente de la Inmolacion de Quetzalcoatl who was a diety in the Meso American culture. The name means feathered serpent or flying reptile.
This is the facade of the Catedral Metropolitana which is now a mixture of Gothic, Baroque, Moorish and Neoclaassical architectural styles. Construction of the original building started in 1558 but 2 earthquakes have since destroyed most of the original building. In the most recent past, new twin towers were built to replace the originals that were destroyed by one of the earthquakes in the 19th century.
Entrance to the Palacio de Gobierno (state government headquarters) is an example of the colonial style architecture which is most prevalent in the city. It was completed in 1774 and has many columns, arches and murals inside.
Rotunda de los Jaliscienses Ilusttres was designed in 1952 to honor the contributions of Jalisco's most notable people represented by the statutes surrounding it.
Institute de Cultural Cabana built in the 19th century is a neoclassical designed building. Originally this building was a shelter for orphans and homeless people. It has 23 courtyards and 106 rooms. It has been a world heritage site since 1997 and is now a museum.
This entry was posted in Culture, Living, Travel and tagged architecture, culture, historical, monuments, tourism, vacations by www.thenaturalsite.com. Bookmark the permalink.


text:
Zidane: I won't ask for new Real Madrid contract
Carlo Garganese
Real Madrid manager Zinedine Zidane says there are no talks planned over a new contract and that he will not be initiating discussions.
Zidane returned to the Santiago Bernabeu last year for a second spell as coach and immediately led Madrid to the Primera Division in his first full season back.
And despite a rocky start to the current campaign, Madrid have embarked on an excellent recent run of form which has seen them re-enter La Liga's title race and win their Champions League group.
This has led to calls that Zidane should be handed an extension to his deal which runs out at the end of next season.
How Haaland has helped move Kane up Man Utd and Chelsea's shopping list
Roma mocked over Mourinho appointment: They think they've won the treble!
Official: Roberto Mancini extends Italy deal until 2026
Memphis Depay confirms MAJOR decision over his future amid Barcelona rumours
Julian Draxler signs new three-year PSG deal
"I have nothing in mind, I have a contract until 2022 and I will not ask for anything," Zidane told reporters.
"Every moment here is great and I am fortunate to say I am in the best club in the world.
"I hope that the players will stay and we build more success."
Zidane won an unprecedented three Champions League titles in a row during his first spell as manager of Madrid.
This Sunday evening, the Blancos take on Eibar.
Barcelona offload Bellerin to Sporting, Porro to Spurs

redpajama_set_name: RedPajamaCommonCrawl


text:
Kids Recreate Recording of Van Halen's Debut Album in Just One Day
The first Van Halen album is already such a phenomenal achievement as one of the greatest rock and roll debuts in music history, but a group of kids in California have kicked it up another notch by recording the album in full -- and they did it in just one day!
The Produce Like a Pro team took students from the Los Rios Rock School in Orange County, Calif., to the legendary Sunset Sound for the recording project. It was there that Studio 1 was set up and in one day the students recorded the Van Halen album in its entirety.
The significance of being in Sunset Sound, and in Studio 1 in particular is that it is the exact room that the mighty VH made that very album. The studio is great at keeping records and they looked into the archives and found a copy of how Van Halen had the studio set up for tracking and it was recreated as closely as possible for the student's recording. Drums, amps, microphones, the console and echo chamber were set up the way that it was documented that Van Halen did it 40 years ago.
Produce Like A Pro and the Sunset Sound team mimicked the exact set up, in the exact same room and The Los Rios Rock School kids came in extremely well prepared with the guidance of the schools highly trained instructors and Teacherzone.com.
The young prodigies ripped through the landmark effort by the SoCal party rock band with professional aplomb, some of which is hinted at in the video above where a 13 year old girl blazes through Eddie Van Halen's signature guitar solo "Eruption" so effortlessly it's mind-melding. For the complete set of videos from the recording session, head over to the Produce Like a Pro site where all 11 tracks can be heard and seen.
Van Halen Albums Ranked
10 Awesome Guitar Prodigies
Source: Kids Recreate Recording of Van Halen's Debut Album in Just One Day


Kedar Hotel is located in Sarafovo, which is one of the new quarters of the city of Bourgas, 10 km away from the city center. Nearby is the Burgas airport and the town of Pomorie is at 7 km distance.
The hotel is opened all the year round and offers accommodation in six double rooms, seven bedrooms and two triple rooms. All rooms are equipped with an air conditioning, cable TV, mini bar, extra bed and luxurious bathroom.
The hotel also offers a BBQ, free and secure parking with video surveillance and a terrace with beautiful sea view. Some rooms have a kitchenette.
For the youngest guests of the hotel Kedar there is a special children's area with space and opportunity for many games.
In Kedar pub we offer a wide selection of different dishes from the Bulgarian and European cuisine. Welcome to hotel Kedar, where the atmosphere is cozy and quiet! It is a favorite place for rest and business meetings.


READY FOR RUSSIA with the Prisma S1 Evolution Junior LTD!
This limited edition of the prisma series from reusch perfectly prepares you for the FIFA World Cup 2018 in Russia.
Legends like Sepp Maier (Germany/1974), Ubaldo Fillol (Argentina/1978), Nery Pumpido (Mexico/1986), Bodo Ilgner (Italien/1990), Claudio Taffarel (USA/1994) and Marcos Reis (Korea/Japan/2002) won with the technical support from the italian company the biggest and most important trophy of the international competition.
This very interesting line provides you with high quality materials, best fit and with an extremely good grip. These gloves were created for professional goalkeeping performances and this leads to the fact that they are THE ultimate innovation, with conviction. With it's new and revised design it is the beginning of a new era for reusch. The successful and established features and technologies of the past years were a big influence in creating the new Prisma.


Russia's domestic policies began to shift almost immediately after the predictable outcome of the presidential election. The initial changes (more are certain to follow) are so serious that they must necessarily entail political adjustments as well. They strike directly at the implicit social contract that has formed the basis of Russia's stability over the past two decades, according to which the state authorities are given a carte blanche by the people in exchange for a certain minimum standard of living and social protection – modest enough for developed countries, but quite substantial compared to the Soviet and early post-Soviet past.
Now President Vladimir Putin has taken a sword to the sacred cow of his regime – a social safety net inherited from the Soviet past that was untouched even during the shock therapy era of the early 1990s. The retirement age will be quickly increased from the current 60 to 65 years for men and from 55 to 63 years for women. The so-called "social retirement benefit" paid to all elderly people, even those who were never employed or contributed to the Retirement Fund, will now be made only to men and women who survive until they are 70 and 68, respectively.
Russia's demographic and financial situation has made this reform – or something like it – inevitable for quite some time. By 2030, Russia's population will decrease by 3.3 percent, and by 2050, by 10.4 percent from today's 146.9 million, according to a 2017 forecast by the United Nations. This depopulation trend cannot be reversed by immigration, since both the authorities and the public are anxious to limit it. In any case, Russia is not a destination for the global migration flow, which is directed to more attractive countries.
At the same time, the average life expectancy for Russian men and women has grown quite significantly, from 59 and 72 years, respectively, in 2000 to 67.5 and 75.6 in 2017; by 2030, government forecasters expect it to rise to 70.5 and 79.6 years. The decrease in population is therefore not connected with a rising mortality rate, as had been the case in the immediate post-Soviet period. Instead, it is an echo of previous "demographic troughs" – dramatic plunges in birth rates and rises in death rates caused by collectivization, industrialization and the Great Purge in the 1930s; World War II in the 1940s, and "shock therapy" in the 1990s.
As Russia enters another demographic trough, the unborn children of the 1990s will not be entering the job market. Retired people now make up almost a third of the population, with each being supported by just 1.68 working people. Further deterioration of this ratio is inevitable. According to government forecasts, by 2030 the total number of economically active Russians will decrease by approximately 8 percent; in the 16-39 age cohort, the decline will be 25 percent. Even a highly efficient economy could not withstand such pressure, and Russia's labor efficiency is the lowest of any OECD country except Mexico's. Such negative demographic trends are impossible to reverse quickly. This leaves no alternative to retirement reform.
The reform's second context is the Russian government's deep fear of depleting its financial resources – dramatically magnified by the lack of any real prospects for renewing normal relations with the West. For this reason, the retirement reform was accompanied by a decision to raise the value-added tax (VAT) rate from 18 to 20 percent.
Today, this levy provides the government with about one-third of its revenue, if one excludes income from oil and gas exports. The VAT increase is expected to bring an extra $10 billion into the budget every year. It is not a very radical step, especially since Russia had already used a 20 percent VAT rate from 1993 to 2004. Yet the tax hike will have a one-off, across-the-board inflationary impact on consumer prices. Combined with the higher retirement age and lower old-age benefit, it will have a clearly negative impact on household income.
The timing for these painful measures was chosen perfectly. Russia's presidential elections are over, and the next parliamentary election is more than three years away. The media are careful to present the reforms as purely the idea of Prime Minister Dmitry Medvedev's government; Mr. Putin had absolutely nothing to do with them.
Even so, the political risks are huge. The limits of the public's trust in President Putin are untested, along with its willingness to combine that trust with a belief that the government can do anything apart from or against his will. Mr. Putin himself has spoken many times against raising the retirement age, notably in 2005, when he said flatly that "this decision will not be taken while I am the president." A YouTube video of this statement has now gone viral in Russia. Perhaps the Russian public's trust in their president is limitless. But what if it is not?
Even if Mr. Putin can be insulated from the backlash, the reforms are still risky to the government. Public opinion is not particularly swayed by rational arguments, and financial reasoning will almost always be overcome by appeals to emotion. Even on the merits, there are serious economic questions about the reform. It will produce an immediate glut of workers over the age of 55. Russia's job market has not been kind to such people – finding an attractive job is already problematic for anybody over the age of 40.
In developed countries, median wages tend to rise steadily until the moment of retirement. In Russia, however, earnings peak at age 45-50, then drop off sharply. A sudden increase in the labor supply of 50- and 60-somethings will completely disrupt the job market – at least in the official economy.
One of the biggest achievements of Vladimir Putin's rule has been a huge and largely successful effort to drag workers and their salaries out of the unregistered "gray" economy. Now their return to the shadows is quite likely. For most men, paying contributions into the Retirement Fund may seem senseless since they have barely an even chance of living until retirement age. (In 47 of 83 Russian regions, the average life expectancy for men is lower.) Evading taxes is easier by dropping out of the official economy and evading them in bulk.
The other risk is an explosive rise in official unemployment. Throughout the post-Soviet years, joblessness was consistently kept very low – at about 4 percent of the economically active population, according to the International Labor Organization. Those who formally register in job centers and receive unemployment benefits are even fewer, at less than 1 percent. If this number increases dramatically, the state's financial obligations will grow as well.
But no matter what ordinary Russians do – flee to the gray economy or register as unemployed – much of the reform's positive effect will be neutralized. Either revenue to the state budget will decline or expenditures will increase. Most likely, both will happen.
The breathtaking cynicism of certain aspects of the retirement reform also poses risks.
Millions of Russians are entitled to early retirement — usually after 20 to 25 years of employment. They belong to several broad categories. The first concerns people who work in hard or dangerous conditions (such as miners) or are otherwise protected (mothers with large families). The promise here is that they will be exempt from the reform.
A second category covers physicians and teachers, along with cultural workers such as actors, ballet dancers and other artists. They are not so lucky, as their "special" retirement benefit is only supposed to kick in after they reach 68 (men) and 63 (women) years of age.
Finally, there are the military, police and other civil servants (including employees of the security, control and surveillance services; courts and public prosecutors; the Ministry of Emergency Situations and others). There are millions of such people, who generally receive retirement pensions several times larger than ordinary employees. Their pension eligibility often starts at age 50, 45, or sometimes even 40. In their peak earning years, they can use these pensions to supplement other earnings.
Because the state clearly distinguishes between first- and second-class citizens, the retirement reform is not supposed to touch these people at all. As mentioned, most of these civil servants can retire early with pensions that are a multiple of what the state pays ordinary employees. Against this, plans to include a 7 percent cost-of-living increase in retirement pensions (which currently average the equivalent of $222 a month) amount to a pittance.
Winston Churchill used to call British civil servants "our uncivil masters"; present-day Russians use much ruder names for them. Unequal treatment under the retirement reform will only increase the significant social tension between "the people" and "the authorities" – even if Mr. Putin himself is exempted from that multifarious and faceless category.
Not surprisingly, the reform is a political orphan. Nobody publicly supports it, apart from the government and deputies from the ruling United Russia party – many of whom would support any top-down measure, including orders for their own public execution.
A partial exception to this rule may apply to the trade unions, which have been traditionally inert and obsequious. The official unions are even organizing rallies against the proposed measures and speaking with unusual vehemence. Mikhail Shmakov, the head of the Independent Trade Union Federation since 1993 and a trusted Kremlin loyalist, wagged his finger at "governors, mayors, deputies at all levels [who] support the government version of the retirement reform," noting that they all face regional elections every September.
Indeed, it is the unions – especially the ones that are truly independent and not part of the official federation – that are being offered an opportunity unique in recent Russian history to become influential political players.
This opportunity is important, because unhappiness about the government's actions is becoming mass-scale and acquiring a precise focus. A petition against raising the retirement age on Change.org (a resource that is very popular in Russia and closely watched by the authorities) has acquired almost 3 million signatures in a month, even though the Russian Confederation of Labor, an independent trade union that sponsored the campaign, has only a few thousand activists.
The main danger for the central authorities is not that someone will step in at the head of the protest, but that it will gain strength while remaining unstructured and devoid of a single coordinating center. The longer this process continues, the more dangerous it becomes. The regime can deal efficiently with specific opponents it can identify. Diffuse discontent and a resultant broad rejection of legitimacy is something it has not encountered yet.
A key question is whether the alternative could be simply removing the discredited ruling group and its sovereign lord, without considering who would replace them. Personalistic regimes in the post-Soviet world have been dismantled in a variety of ways. Sometimes the new face of government is known beforehand (Like Mikheil Saakashvili in Georgia or Viktor Yushchenko in Ukraine). Sometimes it appears suddenly from a street revolution, like a jack-in-the-box (like Nikol Pashinyan in Armenia). Sometimes the leader only emerges after the regime change, when the winners are dividing up the prize (like Petro Poroshenko after Ukraine's Maidan revolution). The important point is that a single figure to rally the opposition is not a prerequisite for regime change.
Those risks are certainly recognized by the authorities. It is quite evident that the retirement reform was deliberately announced in its harshest version, with the intention of significantly watering it down in the autumn, during parliamentary debate. President Putin will almost certainly play a leading role in this process. It is significant that Mr. Putin's media spokesman, Dmitry Peskov, has already been asked whether the president would veto the retirement age law – and that he replied, with great relish, that it is too early to say.
In any case, before these emergency austerity measures become a trial for Mr. Putin, they will be a trial for Mr. Medvedev. The prime minister will be the guinea pig in this policy experiment. If he succeeds in implementing the reforms in close to their original shape, Mr. Medvedev's position could become almost unassailable and he may dare to turn his ambitions to something bigger. If he fails, he will play the familiar kamikaze role that the Russian public often ascribes him – make as many irreversible decisions as possible and then leave. In that case, the man who replaces him would be Mr. Putin's most likely successor – assuming there is no radical regime change in the meantime.
The Russian authorities have another tried-and-tested way of reducing the domestic policy risks: a new military campaign. But with each attempt to show the superiority of guns over butter, the required commitments grow. After Crimea, Ukraine and Syria, it is simply not possible to keep raising the stakes all the time. At some point, even the Russian public becomes immune to jingoistic pressure, and that point may even have been reached.
The first results of this grand political maneuver will become visible in the fall, when football fever and the holiday season is over, and when the usual seasonal surge in consumer prices gathers momentum. As parliament begins deliberations on the government's tax and retirement decrees (the latter passed its first, pro forma reading on July 19, supported only by United Russia), possible scenarios for future developments will begin to take shape. The menu will remain quite broad, but it will contain many more bad options than good.


text:
Sudanese Military, Protest Leaders Sign Transition Deal
By Esha Sarai
Sudanese pro-democracy supporters celebrate a final power-sharing pact with the ruling military council, Aug 17, 2019, in Khartoum. The deal paves the way for a transition to civilian-led government following the overthrow of President Omar al-Bashir.
Updated 6:04 p.m. Aug. 17.
KHARTOUM, SUDAN - Sudan's Transitional Military Council and protest leaders on Saturday signed a historic power-sharing agreement in Khartoum.
The pact opens the way for the two factions to form a joint military and civilian council that will lead Sudan for three years until elections are held for a civilian-led government.
While the signing itself was brief, hours of celebrations followed across the capital.
Sudanese citizens waved flags and chanted slogans that had been repeated during the protests, the most popular of which was the word "madania," which means "civilians." In the context of Saturday's agreement, that referred to the success of civilian protests in forming a new government.
Thousands of people gathered in Friendship Yards Saturday evening to celebrate the agreement with music (E. Sarai/VOA)
"I'm so happy — I can't express it," Nirad Abdullah, who stood outside Friendship Hall as the agreement was being signed, told VOA.
"A new Sudan will be built. It's really a beautiful thing. Our lives are going to be changed," she said.
Fellow protesters welcomed
As many cheered the agreement from outside the government hall in Khartoum, hundreds of others went to the train station to greet residents of Atbara, the first city to protest against former President Omar al-Bashir's rule in December. They traveled 300 kilometers to celebrate in the capital.
"We came here to express our victory, to carry the memories and ambitions of the Sudanese people," Awadallah Ahmed told VOA as he stepped off the train. "We came to witness the final signing and witness the fulfillment of the demands of the revolution."
Sudan's Opposition Alliance Chooses Prime Minister
Forces of Freedom and Change nominate economist Mohammed Abdalla Hamdok as PM for the transitional government
U.S. Secretary of State Mike Pompeo tweeted Saturday, "To the people of #Sudan, we congratulate you on today's signing of the Constitutional Declaration. The United States will continue to support you in your pursuit of a government that protects the rights of all Sudanese citizens and leads to free and fair elections."
State Department spokeswoman Morgan Ortagus issued a statement about the Constitutional Declaration that added, "The Forces for Freedom and Change and the Transitional Military Council have taken an important step forward. We look forward to the swearing-in of the Sovereign Council on August 19 and the appointment of a prime minister on August 20."
The transition deal followed months of demonstrations after al-Bashir was forced out of office in April. Even after his ouster, the Sudanese people continued to make their voices heard in the streets, demanding a fair transition plan.
Hiba Salah waves Sudan's flag outside Friendship Hall as the agreement is being signed (E. Sarai/VOA)
Preceding protests erupted in December over the high price of fuel, and eventually evolved into demands for the authoritarian al-Bashir to step down.
"We have been through a very tough time," Hiba Salah, who had been participating in protests since December, told VOA.
"When the revolution erupted in December, the protests were not that big, but gradually they grew to this. So it's huge for us, despite the fact that we still have demands," she said, speaking with a Sudanese flag draped around her, standing outside Friendship Hall while the agreement was being signed.
Sudanese pro-democracy supporters celebrate a final power-sharing agreement with the ruling military council, Aug 17, 2019, in Khartoum.
Salah was one of many protesters who were somewhat wary about celebrating. Although many point to the signing of the agreement as proof of the success of their revolution, some opposition supporters are unhappy that military leaders who carried out violent attacks on protesters, killing more than 200 this year, will be named to the Sovereign Council.
Under the agreement that was formalized Saturday, members of the Sovereign Council will be named on Sunday, and a prime minister is to be unveiled Tuesday. The military will remain in charge of the country for more than a year before the civilians take control.
Sudan: While Peace Deal is Signed, Feminists Fight for Representation
Women who played an integral role in protests before and after the ousting of Omar al-Bashir now feel they are not adequately represented in the transition government
US Imposes Travel Ban on Sudan's Former Security Chief
State Department blocks Salah Gosh after 'credible information' of involvement in torture
By James Butty
Esha Sarai


I kept putting it off, until I could put it off no longer lol 6 months or so later, I finally went and got my roots "touched up".
I was actually more diligent about it, back when I was younger. Now that I'm older, it's not really that high on my list of priorities lol However, enough was enough. As you can see, my hair looked horrible (the brassiness wasn't doing me any favors either) so I decided to just get on with it.
From a different angle, so you could see that I wasn't exaggerating lol It was baaad!
Even the ends were way too light and therefore annoying!
Ta-da! The finished result! I didn't pay to get it properly straightened because the weather was iffy (the rain would make it frizz and curl) so the hairstylist sorta' ran a brush through it while she haphazardly blow-dried it. It meant my ends didn't look that nice (as you'll see below), but it also meant I got a ton of volume (just the way I like it)!
I got it done at a different salon and surprise surprise, it didn't cost an arm and a leg! More importantly, I was pretty happy with my hair now!
Thanks for the heads up! Glad you got the the haircut you wanted! … but you're saying it they're just ok? So not worth another visit or…? Would you recommend them or nah?
first of all, you look gorgeous even if I didn't see the rest of your face.
Lol yes.. You picked up on that 'ok' verdict i gave them. Honestly, this is how i see it. I mainly choose to go to good hair places mainly coz i think the staff is well trained and they know what they are doing. I do have some ideas in my mind but i don't know if it suits my face and my hair type and this is where i need them to step in. I don't want them to just blindly do as i say coz i could be wrong too. With the particular stylist i didn't get that. She def did the best she could given our language barrier. I wanted to get a textured lob but it just landed up to be a one length lob. The reason i did not want one length is mainly coz i am blessed with thick hair and i don't want so much concentration at the end. But yeah i don't see myself going back anytime soon. Lucky for me, i am going on a vacation soon, so i am keen to get my hair done with my sister's hairstylist.
Rei, you're too sweet! ♥ I feel all awkward when I get complimented lol but thank you! Don't miss the blonde too much, the upkeep is annoying as you're already aware (notice how I've only gotten it "touched up" 6 months later and still complaining about maintenance lol) Missed you, lil mama!
Sonia, I hear ya'! Nothing beats knowing that you're in good hands (peace of mind) which unfortunately in Kuwait, is kinda' rare lol. Oooh vacation! Sweet! If I remember correctly, Australia, yeah? Ok, look, I know it has a dumb name, but you NEED to get your hands on the Sol De Janeiro Bum Bum Cream while you're there! Why? Ever hear of living vicariously through other people? Apparently, I shop vicariously now lol Do it for me! If you love it, let me know. If you're indifferent or hate it, then I had nothing to do with this :P For real though, have a safe trip and enjoy!
Am so glad you get me. My sisters say that i am a fuss pot coz i over think too much. Honestly that's just who i am.. lol. Yup, you are right.. Heading to Aus this time. Oh yeah, i have heard a lot about that cream as well.. Ascia loves it too. Have ya tried it? I will def take you up on that and get one and let ya know either ways :) Thanks boo.. Do let me know if you would like for me to get something for ya.
Thanks boo!! I hope so too! :) Will keep ya posted.


text:
Sophie Turner has a celebrity matchmaker
Ed Sheeran on GoT
Maisie Williams knows the end to Game of Thrones
Game of Thrones landmark destroyed
Game of Thrones author, stars at Supanova
Game of Thrones star conquers world
by Anthony Chapman
HAFTHOR Bjornsson has finally achieved his lifelong dream of winning the World's Strongest Man competition.
The Icelandic giant, who stands at 206cm and weighs a whopping 200kg, had finished runner-up the past two years.
But Bjornsson, known by many as portraying Gregor 'The Mountain' Clegane in TV show Game of Thrones, went one step further at the weekend to claim his first-ever WSM crown.
The 29-year-old made light work of the competition in Manila, Philippines, storming to victory in his qualifying group before winning the Overhead Press and Loading Race in the finals.
This saw Bjornsson finish top of the pile with 51.5 points - six-and-a-half more than closest competitor Mateusz Kieliszkowski and five-and-a-half more than four-time champion Brian Shaw.
Bjornsson has been competing at World's Strongest Man since 2011, consistently finishing in the top three since 2012.
The Max Overhead. / AFP PHOTO / NOEL CELIS /
However, he was yet to get his hands on the coveted trophy after coming close during Eddie Hall's victorious campaign last year.
British ace Hall, who set a world-record in the dead lift with 500kg in 2016, graciously handed over his title to Bjornsson following his shock retirement from WSM for health reasons.
But the signs were pointing to a Bjornsson victory regardless, with the beast already winning this year's Arnold Strongman Classic as well as Europe's Strongest Man.
He has also dominated Iceland's Strongest Man competition since 2011, with the country regarded as the historical home of the world's most powerful athletes, and is the first Icelander to win WSM since Magnus Ver Magnusson in 1996.
A man mountain.
Polish star Kieliszkowski was all smiles after landing his first-ever podium position, finishing just a single point ahead of WSM legend Brian Shaw.
The American icon, 36, has now finished third for two consecutive years after winning four times between 2011 and 2016.
He also lost out to Bjornsson at this year's Arnold, finishing second behind his rival in March.
And there is a general feeling that change is now afoot in the strongman game, with Bjornsson looking to become the new Shaw and dominate for years to come.
Hafthor Bjornsson and Mateusz Kieliszkowski. / AFP PHOTO / NOEL CELIS
This article was originally published by The Sun and reproduced with permission.
More bad news for Game of Thrones fans
Starc jumps out of brother's shadow
Game of Thrones' deadly secrets


text:
Ursula Rani Sarma, scriptwriter, director, poet and educator
Ryan O'Neill
Wednesday, 5th June, 2019 4:51pm
Photo: Helen Warner
Name and position: Ursula Rani Sarma, scriptwriter, director, poet and educator
Lives: London, UK
Family: One husband and three children.
Pets: Sadly none at present though a Jack Russell is on my list.
Favourite thing about Cork: The people.
Least favourite thing about Cork: The rain.
One thing you'd change about Cork: See above.
When you were small, what did you want to be as a grown-up?
When I was younger, I wanted to be an astrophysicist. I loved the idea of it, it was just the maths and physics that I had a problem with…
Tell us about your career progression to your role today:
I fell in love with the theatre while at UCC and spent more time writing and directing plays than focusing on my studies. Luckily it paid off, and after winning some awards at the annual Irish Student Drama Association (ISDA) in 1999, I was sent to the Edinburgh Fringe Festival to write and direct a new play called '…touched…'. The success of this play managed to secure several commissions with theatre companies in the UK and a residency at the National Theatre in London. I have never looked back. I moved across into screenwriting some years after and now work between both mediums.
What is the most enjoyable aspect of what you do?
The writing itself - sometimes joyful, sometimes painful, but always compulsory.
It fluctuates between a need to get the words down on paper and a need to meet a deadline. It is mostly the latter at present.
What advice would you give your 15-year-old self?
Care less about what people think - you won't remember their names down the line.
If you weren't in the job you have, what would you be doing?
I would have liked to have worked in music as a singer/songwriter.
What is your greatest life or career achievement to-date?
My children, no contest.
Who has had the biggest influence on you in your life?
My mother and her incredibly positive outlook on life, and her endurance.
What is the life dream now?
Health, and as much happiness as possible.
How do you switch off?
I've been practising transcendental meditation for years now. It is brilliant for resetting yourself and bringing you back down to earth.
What is your favourite Cork memory?
There are too many to choose from. I met my best friends in Cork and started writing and directing plays here. It will always be my favourite city.
What is your favourite place in Cork?
I love walking down by St Finbarr's Cathedral, preferably at sunset, looking out over the city.
Do you have a favourite quote or motto?
'Don't look left or right but straight ahead.' I find this useful as an artist, because it reminds me to stay focused on what I'm trying to achieve creatively and to not be distracted by the noise around me.
When are you at your happiest?
With my family and friends, preferably near the sea at home in West Clare.
Any regrets?
None. The mistakes and the bad choices only make you stronger in the end.
What is your hidden talent?
Making pancakes both crepes and silver dollar - I have both down to a fine art.
What might we be surprised to know about you? I am the course leader of the masters in scriptwriting at Bath Spa University. I never had the opportunity to study the art of dramatic writing, so enabling people to do so and to take their work to the next level is enormously gratifying.
Anything else you'd like to share with us?
Please try and avoid using single use plastic! We have an entire planet to clean up, so we need to start now.


ADA System has earned great respect in a very short time and has already customers in many industries and organizations. The company is now considered the Leader in Israel in the DM market and wins new customers in a rapid growth.
An Electronic Document Management is a critical application in every organization. For that exact reason we at Artis developed a Rock Solid software that will guard your documents and keep them available at all times. At the same time we found a way to make the ADA System very cost effective with a fast return on investment. ADA System is a Rapid Application Deployment System that doesn't call for an "Army" of costly computer specialists in order to create one or more applications based on the System. The deployment is fast, painless and inexpensive. Our customer think they found a Winner and that is worth all the efforts.
Who Can Benefit From The ADA System ?
The system is currently installed in more than a hundred organizations and institutions in Israel. Our clients include: Bank Discount, Bank Yahav, Social Security Administration, "Mivtachim" Pension Fund, the Ayalon Insurance Company, The Israel Phoenix Insurance Company, 012 Golden Lines (an international telecommunications company), Clal Insurance, the Israel Defense Forces, Recruitment companies, Leumit HMO, The Israel Postal Bank, and many others. We attribute our success to our excellent product and superior customer service, both of which are a source of pride to our company.


text:
Home » Quontic Bank: Proprietary products are key to reverse mortgage success
Lending Reverse
Quontic Bank: Proprietary products are key to reverse mortgage success
Says this is where the opportunity lies in 2019
Jessica Guerin
KEYWORDS Federal Housing Administration FHA HECMs Home equity PROPRIETARY REVERSE MORTGAGES QUOTIC BANK Reverse Market Insight reverse mortgages
As the Federal Housing Administration's reverse mortgage product continues to see its volume decline, some lenders are setting their sights on the non-agency proprietary reverses that have come to market as of late.
Unlike their federally insured HECM counterpart, proprietary reverse mortgages are not government insured, and therefore do not come with steep mortgage insurance premiums. And, as a private label product, proprietary reverses can accommodate borrowers with higher-value homes and those without FHA-approved condos, and they often have less restrictive underwriting standards.
Last year, the industry saw a wave of these products hit the market as lenders reacted to HUD's HECM program changes with long-awaited innovation on the proprietary front. Now, there are seven different proprietary reverse mortgages for borrowers to choose from.
For some lenders operating in the HECM space, like New York-based Quontic Bank, this is where the real opportunity lies.
"With this downturn, we really had to reassess the market and figure out what the future holds," said Quontic CEO and Chairman Steven Schnall. "We're still working hard on originating a decent volume of HECMs, but I think the proprietary mortgage is the industry's solution to the whipsawing around that HUD is causing with all the guideline changes."
Schnall said Quontic, a small bank with about $400 million in assets, plans to focus intently on proprietary originations this year, hoping to reclaim some of the volume it lost in wake of the HECM program changes issued in October 2017.
Currently, Quontic ranks No. 17 on the Top 100 HECM Lenders list from Reverse Market Insight, its spot in the rankings falling as its volume slid, declining 17% year over year this December.
Schnall said he thinks the proprietary products will help recapture volume. Plus, as a federally chartered bank, Quontic may have a distinct competitive advantage over other lenders operating in its home state.
Currently, New York does not allow lenders to originate non-agency reverse mortgages, but Schnall said that Quontic is likely exempt from this state mandate.
"Federally charted banks are pre-empt from following the individual 50 state department requirements in instances where there is a contradiction between the federal regulations and the state regulations," Schnall explained. "We are not beholden to New York's requirements to approve this product for their licensed mortgage lenders… As such, we're planning to originate this product in New York, and to my knowledge, we'll be the only one doing so."
Currently, Quontic operates two reverse mortgage call centers, one that staffs about 20 in Indianapolis and a smaller operation that focuses on educating referral partners in Melville, New York.
In 2019, Schnall said both centers will focus on targeting areas rife with opportunity for proprietary reverses.
"The perfect candidate is the jumbo homeowners who have high equity and low income," he said. "The market is pretty wide open for this, even though most of the big players have already launched into the space. It's still very new."
While Schnall said that while he believes there will always be a market for HECMs, he doesn't envision the FHA's product to completely recover the volume it lost after 2017's program changes.
"With the reduced principal limit factors and increased mortgage premiums, I don't know that the HECM rebounds meaningfully," he said. "I think the rebound is going to be in the proprietary market – I really think that's where the future of this product is. Keep the federal government out of it and let the free market do its thing."
Reverse Mortgage Funding expands payment options on proprietary reverse product
Finance of America Reverse eliminates key feature on proprietary reverse mortgage HELOC
One Reverse Mortgage launches proprietary product
Jessica Guerin is an editor at HousingWire covering reverse mortgages and the housing wealth space. She is a graduate of Boston University and has a master's degree from Northwestern's Medill School of Journalism. She worked previously as the editor-in-chief of The Reverse Review magazine, which was recently acquired by HousingWire.
Recent Articles by Jessica Guerin
Median home price climbs to all-time high
Homeowners are taking on fewer house projects, but they're spending more
Quarter of homeowners can't define a HELOC
Quicken Loans logs best quarter in company history
LenderClose adds to sales, software development team


St. Albert Public Library's policies and procedures comply with provincial legislation established October 1, 1999. We respect the privacy of our patrons, particularly patron registration information and borrowing records.
There are many restrictions on who has access to a patron's personal information. Some Library employees need to use personal information to send overdue notices or notify a patron about a book on hold. However, not all Library employees have access to patron records. Similarly, unless a patron has given written consent, Library employees cannot release personal information to third parties.
A third party includes an adult Library member living at the same address, e.g. your spouse. This person does not have access to your borrowing record at the Library. If you want to have another adult carry out transactions on your membership, e.g. renewals, pay overdue fines, collect holds, they must be able to present your Library card.
the rights of parents and guardians respecting minors.
If you and your family share an email account, please note that email notices will list your name and the titles you have available on hold for pickup or items that are overdue. It is up to you to decide if you want this type of information arriving in a shared account, or if you wish to provide separate accounts.


text:
Marc Vellrath
Academic Affiliates
Professional Affiliates
Claro Experts
Expert Search Services
FSG/Claro
Info/Contact Us
Standard Terms
Ralph A. Walkling
Academic Affiliate
Email: Contact Marc Vellrath
Phone: (925) 258-9600	VCard	View CV
Dr. Ralph A. Walkling is the Stratakis Chair in Corporate Governance and Founder and Executive Director, Center for Corporate Governance, Drexel University. He also is the Professor Emeritus at Ohio State University. Dr. Walkling is internationally known for his research involving corporate governance and corporate acquisitions and for his ability to communicate financial concepts with clarity and in an exciting, effective fashion. He is a regular consultant to industry and a leading contributor to the top refereed journals in his field including The Journal of Financial Economics, The Journal of Finance, The Journal of Financial and Quantitative Analysis and The Rand Journal of Economics.
Dr. Walkling has been listed in the top 1% of more than twelve thousand finance authors in terms of academic citations to their work. He has received numerous awards for best papers in corporate finance and excellence in graduate teaching. In 2008 the Eastern Finance Association awarded him their scholar of the year award.
Dr. Walkling currently serves as associate editor of The Journal of Financial and Quantitative Analysis, The Journal of Applied Finance, and The Journal of Corporate Finance. He is a past associate editor of Financial Management. He is a member of the Board of Trustees and Past President of the Financial Management Association, an international organization of over 7,000 academics and practitioners. Prior to joining Drexel, Dr. Walkling was Dean's Research Professor of Finance in the Fisher College of Business at Ohio State University. He received his B.S. from Towson State University and his MBA and Doctorate from the University of Maryland.
As the founder and Executive Director of the Center for Corporate Governance at Drexel University, Dr. Walkling directs the Center's advisory board comprised of leading area CEOs and executives. He has organized and moderated numerous conferences covering diverse issues such as rules of engagement for CEO and boards in the Sarbanes-Oxley era and corporate governance failures contributing to the subprime meltdown and subsequent lending crisis.
Ph.D., Finance, University of Maryland, 1980
MBA, College of Business and Management, University of Maryland, 1976
B.S., Business Administration and Music Theory, Towson State University, 1975
Recent news, presentations, and publications
"Industry Shocks and Merger Activity: An Analysis of U.S. Public Utilities" with David A. Becher and Harold Mulherin, Journal of Financial and Quantitative Analysis. (Forthcoming).
"Anticipation, Acquisitions and Bidder Returns: Industry shocks and the transfer of information across rivals" with Jie Cai and Moon Song. Review of Financial Studies Vol 24 No 7. (July 2011).
"Shareholders Say on Pay: Does it Create Value?" with Jie Cai, (April 2011), The Journal of Financial and Quantitative Analysis.
"Electing Directors" with Jacqueline Garner and Jie Cai, (October 2009), The Journal of Finance.
"Share Repurchase, Executive Options and Wealth Changes to Stockholders and Bondholders" with Sang-gyung Jun & Mookwon Jung, Forthcoming, The Journal of Corporate Finance.
"The History and Performance of Concept Stocks" with Jim Hsieh, The Journal of Banking and Finance 9 (September 2006) 2433-2469.
"Determinants and Implications of Arbitrage Holdings in Acquisitions" with Jim Hseih. Winner of the Best Paper Award at the 2003 Financial Management Association Meetings, The Journal of Financial Economics 77 (2005) 605-648.
"Speculation Spreads, Arbitrage Profits and Market Pricing of Proposed Acquisitions," with Jan Jindra Journal of Corporate Finance 10 (2004) 495-526.
"Divestitures and the Liquidity of the Market for Corporate Assets" with Frederik P. Schlingemann and Rene Stulz, The Journal of Financial Economics Vol 64, (April 2002) No. 2: 117-144.
"Abnormal Returns to Rivals of Acquisition Targets: A Test of the 'Acquisition Probability Hypothesis'" with Moon H. Song, The Journal of Financial Economics Vol 55, (February 2000) No. 2: 143-171.
"Corporate Governance and Shareholder Initiatives: Empirical Evidence, with Jon Karpoff and Paul Malatesta," The Journal of Financial Economics: (November 1996), 365-395.
"The Impact of Industry Classifications on Financial Research," with Kathleen M. Kahle, Journal of Financial and Quantitative Analysis (September 1996), 309-335.
"Executive Careers and Compensation Surrounding Takeover bids" with Anup Agrawal, Journal of Finance (July 1994), Vol. 49, #3 985-1014.
"The Impact of Managerial Ownership on Acquisition Attempts and Target Shareholder Wealth," with Moon H. Song, The Journal of Financial and Quantitative Analysis, 28, #2 (December 1993), 439-457.
"A Test of The Free Cash Flow Hypothesis: The Case of Bidder Returns" with Rene Stulz and Larry Lang, The Journal of Financial Economics (October 1991) #39, 315-335.
"Dividend Capture in NASDAQ Stocks" with Jonathan Karpoff, The Journal of Financial Economics (November/December 1990),9-65.
"The Distribution of Target Ownership and the Division of Gains in Successful Takeovers" with Rene Stulz and Moon H. Song, The Journal of Finance, Vol. 45, No. 3 (July 1990), 817-833.
"Managerial Performance, Tobin's Q and the Gains from Successful Tender Offers" with Rene Stulz and Larry Lang, The Journal of Financial Economics (September 1989), #24, 137-154.
"Short Term Trading Around Ex-Dividend Days: Additional Evidence" with Jonathan Karpoff, The Journal of Financial Economics, Vol. 21, No. 2 (September 1988), 291-198.
"Poison Pill Securities: Stockholder Wealth, Profitability, and Ownership Structure" with Paul H. Malatesta, The Journal of Financial Economics, Vol. 20, No. 1/2 (Jan/Mar 1988), 347-376.
"Target Abnormal Returns Associate with Acquisition Announcements: Payment, Acquisition Form, and Managerial Resistance" with Yen-Sheng Huang, The Journal of Financial Economics, Vol. 19, No. 2 (December 1987), 329-349.
"Dispersion of Expectations and Trading Volume" with Eugene E. Comiskey and Michael Weeks, Journal of Business Finance and Accounting, Vol. 14, No. 2 (Summer 1987), 229-239.
"An Application of Arbitrage Pricing Theory to Futures Markets" with James V. Jordan and Michael C. Ehrhardt, The Journal of Futures Markets, Vol. 7, No. 1 (1987), 21-34.
"Determinants of Tender Offer Premiums" with Robert O. Edmister, Financial Analysts Journal (January-February 1985), 27-37.
"Predicting Tender Offer Success: A Logistic Analysis," The Journal of Financial and Quantitative Analysis, Vol. 20, No. 4 (December 1985), 461-478.
"Trends in Institutional Commission Costs Following Deregulation: Evidence from the USA" with Robert O. Edmister, The Journal of Business Finance and Accounting (Winter 1985), 553-559.
See CV for more publications…
Information / Contact Us
© Finance Scholars Group


Previous Stem Cell Research & Treatment with GIOSTAR – Interview with Dr. Anand Srivastava, M.S., Ph.D.
Denver Mayor Michael Hancock discusses the smart city project partnership with Panasonic. Live from CES 2016, Las Vegas, on The DM Zone with host Dianemarie Collins.
The company and Denver Mayor Michael Hancock revealed the projects Tuesday at the giant CES show in Las Vegas, the annual consumer electronics convention that this year has "smart city" technology as a focus.
Panasonic Enterprise Solutions Co. is a division of Newark, New Jersey-based Panasonic North America.
The Denver projects announced Tuesday include a solar energy collection and battery storage carport system built with the help of utility company Xcel Energy.
Residential parts of the development will have access to Panasonic's On4Care system providing in-home bio-metric reading and tele-medicine capabilities allowing residents real-time interaction with their doctors.


We're more than just a PR agency in Sydney.
Starting the agency at the age of 23, after working as an entertainment and news journalist, Dionne was one of Australia's youngest PR innovators.
Now 11 years later she has established herself as an industry leader, innovator, and thought-leader in the media industry. Specialising in consumer lifestyle brands, she understands how to make these brands famous amongst their competitors.
Passionate about effective communication and storytelling (traits she learned as a journo), Dionne and her team have pioneered new and effective methods to capture the media's attention and provide a sophisticated service for the agency's clients.
By introducing new communication methods to her client's campaigns, Dionne utilises new approaches to PR with the introduction of modern digital marketing, SEO, influencer engagement and memorable event management.
Dionne prides herself on being the ultimate multi-tasker, creative executor and problem solver and with over fifteen years industry experience, she thrives on a challenge.
Dionne will only work with a brand whose principles align with hers and a brand where she knows she can use her communications skills to make a positive impact on her client's business. Dionne and her team look forward to working with you and your brand.
Get in touch with us to find out more about us and see how we may help promote your business.
We're an integrated communications consultancy offering PR, social media, marketing, event management and digital related services to national and global clients who are seeking clever strategies to tell their story, target key audiences and increase brand awareness.
We see the value that comes from strategic communication execution and in our company history over a decade long, we've seen client's businesses thrive as a direct result of the work we have done for them. Basically, we make your brand well-known within your target audience.
We'll make your brand famous.
We understand that clients have a choice, so finding the suitable communications agency partner is imperative to a successful campaign.
With the founder at the helm and staff with decades worth of experience both locally and globally, Polkadot Communications is a 360-degree communications consultancy who tailor the program depending on the client's objectives.
We don't produce cookie-cutter campaigns, we don't take on conflicting brands and we certainly don't work with clients whom we can't see the vision.
With this approach, we have earned ourselves a reputation for using our creativity, our industry knowledge, our strong media contacts and unwavering dedication to producing a comprehensive communications campaign for our clients.
Let's take the first step together and book a free 30-minute consultation.