text:
========================================
Kaleidoscope: Code generation to LLVM IR
========================================

.. contents::
   :local:

Chapter 3 Introduction
======================

Welcome to Chapter 3 of the "`Implementing a language with
LLVM <index.html>`_" tutorial. This chapter shows you how to transform
the `Abstract Syntax Tree <LangImpl2.html>`_, built in Chapter 2, into
LLVM IR. This will teach you a little bit about how LLVM does things, as
well as demonstrate how easy it is to use. It's much more work to build
a lexer and parser than it is to generate LLVM IR code. :)

**Please note**: the code in this chapter and later require LLVM 2.2 or
later. LLVM 2.1 and before will not work with it. Also note that you
need to use a version of this tutorial that matches your LLVM release:
If you are using an official LLVM release, use the version of the
documentation included with your release or on the `llvm.org releases
page <http://llvm.org/releases/>`_.

Code Generation Setup
=====================

In order to generate LLVM IR, we want some simple setup to get started.
First we define virtual code generation (codegen) methods in each AST
class:

.. code-block:: c++

    /// ExprAST - Base class for all expression nodes.
    class ExprAST {
    public:
      virtual ~ExprAST() {}
      virtual Value *Codegen() = 0;
    };

    /// NumberExprAST - Expression class for numeric literals like "1.0".
    class NumberExprAST : public ExprAST {
      double Val;
    public:
      NumberExprAST(double val) : Val(val) {}
      virtual Value *Codegen();
    };
    ...

The Codegen() method says to emit IR for that AST node along with all
the things it depends on, and they all return an LLVM Value object.
"Value" is the class used to represent a "`Static Single Assignment
(SSA) <http://en.wikipedia.org/wiki/Static_single_assignment_form>`_
register" or "SSA value" in LLVM. The most distinct aspect of SSA values
is that their value is computed as the related instruction executes, and
it does not get a new value until (and if) the instruction re-executes.
In other words, there is no way to "change" an SSA value. For more
information, please read up on `Static Single
Assignment <http://en.wikipedia.org/wiki/Static_single_assignment_form>`_
- the concepts are really quite natural once you grok them.

Note that instead of adding virtual methods to the ExprAST class
hierarchy, it could also make sense to use a `visitor
pattern <http://en.wikipedia.org/wiki/Visitor_pattern>`_ or some other
way to model this. Again, this tutorial won't dwell on good software
engineering practices: for our purposes, adding a virtual method is
simplest.

The second thing we want is an "Error" method like we used for the
parser, which will be used to report errors found during code generation
(for example, use of an undeclared parameter):

.. code-block:: c++

    Value *ErrorV(const char *Str) { Error(Str); return 0; }

    static Module *TheModule;
    static IRBuilder<> Builder(getGlobalContext());
    static std::map<std::string, Value*> NamedValues;

The static variables will be used during code generation. ``TheModule``
is the LLVM construct that contains all of the functions and global
variables in a chunk of code. In many ways, it is the top-level
structure that the LLVM IR uses to contain code.

The ``Builder`` object is a helper object that makes it easy to generate
LLVM instructions. Instances of the
```IRBuilder`` <http://llvm.org/doxygen/IRBuilder_8h-source.html>`_
class template keep track of the current place to insert instructions
and has methods to create new instructions.

The ``NamedValues`` map keeps track of which values are defined in the
current scope and what their LLVM representation is. (In other words, it
is a symbol table for the code). In this form of Kaleidoscope, the only
things that can be referenced are function parameters. As such, function
parameters will be in this map when generating code for their function
body.

With these basics in place, we can start talking about how to generate
code for each expression. Note that this assumes that the ``Builder``
has been set up to generate code *into* something. For now, we'll assume
that this has already been done, and we'll just use it to emit code.

Expression Code Generation
==========================

Generating LLVM code for expression nodes is very straightforward: less
than 45 lines of commented code for all four of our expression nodes.
First we'll do numeric literals:

.. code-block:: c++

    Value *NumberExprAST::Codegen() {
      return ConstantFP::get(getGlobalContext(), APFloat(Val));
    }

In the LLVM IR, numeric constants are represented with the
``ConstantFP`` class, which holds the numeric value in an ``APFloat``
internally (``APFloat`` has the capability of holding floating point
constants of Arbitrary Precision). This code basically just creates
and returns a ``ConstantFP``. Note that in the LLVM IR that constants
are all uniqued together and shared. For this reason, the API uses the
"foo::get(...)" idiom instead of "new foo(..)" or "foo::Create(..)".

.. code-block:: c++

    Value *VariableExprAST::Codegen() {
      // Look this variable up in the function.
      Value *V = NamedValues[Name];
      return V ? V : ErrorV("Unknown variable name");
    }

References to variables are also quite simple using LLVM. In the simple
version of Kaleidoscope, we assume that the variable has already been
emitted somewhere and its value is available. In practice, the only
values that can be in the ``NamedValues`` map are function arguments.
This code simply checks to see that the specified name is in the map (if
not, an unknown variable is being referenced) and returns the value for
it. In future chapters, we'll add support for `loop induction
variables <LangImpl5.html#for>`_ in the symbol table, and for `local
variables <LangImpl7.html#localvars>`_.

.. code-block:: c++

    Value *BinaryExprAST::Codegen() {
      Value *L = LHS->Codegen();
      Value *R = RHS->Codegen();
      if (L == 0 || R == 0) return 0;

      switch (Op) {
      case '+': return Builder.CreateFAdd(L, R, "addtmp");
      case '-': return Builder.CreateFSub(L, R, "subtmp");
      case '*': return Builder.CreateFMul(L, R, "multmp");
      case '<':
        L = Builder.CreateFCmpULT(L, R, "cmptmp");
        // Convert bool 0/1 to double 0.0 or 1.0
        return Builder.CreateUIToFP(L, Type::getDoubleTy(getGlobalContext()),
                                    "booltmp");
      default: return ErrorV("invalid binary operator");
      }
    }

Binary operators start to get more interesting. The basic idea here is
that we recursively emit code for the left-hand side of the expression,
then the right-hand side, then we compute the result of the binary
expression. In this code, we do a simple switch on the opcode to create
the right LLVM instruction.

In the example above, the LLVM builder class is starting to show its
value. IRBuilder knows where to insert the newly created instruction,
all you have to do is specify what instruction to create (e.g. with
``CreateFAdd``), which operands to use (``L`` and ``R`` here) and
optionally provide a name for the generated instruction.

One nice thing about LLVM is that the name is just a hint. For instance,
if the code above emits multiple "addtmp" variables, LLVM will
automatically provide each one with an increasing, unique numeric
suffix. Local value names for instructions are purely optional, but it
makes it much easier to read the IR dumps.

`LLVM instructions <../LangRef.html#instref>`_ are constrained by strict
rules: for example, the Left and Right operators of an `add
instruction <../LangRef.html#i_add>`_ must have the same type, and the
result type of the add must match the operand types. Because all values
in Kaleidoscope are doubles, this makes for very simple code for add,
sub and mul.

On the other hand, LLVM specifies that the `fcmp
instruction <../LangRef.html#i_fcmp>`_ always returns an 'i1' value (a
one bit integer). The problem with this is that Kaleidoscope wants the
value to be a 0.0 or 1.0 value. In order to get these semantics, we
combine the fcmp instruction with a `uitofp
instruction <../LangRef.html#i_uitofp>`_. This instruction converts its
input integer into a floating point value by treating the input as an
unsigned value. In contrast, if we used the `sitofp
instruction <../LangRef.html#i_sitofp>`_, the Kaleidoscope '<' operator
would return 0.0 and -1.0, depending on the input value.

.. code-block:: c++

    Value *CallExprAST::Codegen() {
      // Look up the name in the global module table.
      Function *CalleeF = TheModule->getFunction(Callee);
      if (CalleeF == 0)
        return ErrorV("Unknown function referenced");

      // If argument mismatch error.
      if (CalleeF->arg_size() != Args.size())
        return ErrorV("Incorrect # arguments passed");

      std::vector<Value*> ArgsV;
      for (unsigned i = 0, e = Args.size(); i != e; ++i) {
        ArgsV.push_back(Args[i]->Codegen());
        if (ArgsV.back() == 0) return 0;
      }

      return Builder.CreateCall(CalleeF, ArgsV, "calltmp");
    }

Code generation for function calls is quite straightforward with LLVM.
The code above initially does a function name lookup in the LLVM
Module's symbol table. Recall that the LLVM Module is the container that
holds all of the functions we are JIT'ing. By giving each function the
same name as what the user specifies, we can use the LLVM symbol table
to resolve function names for us.

Once we have the function to call, we recursively codegen each argument
that is to be passed in, and create an LLVM `call
instruction <../LangRef.html#i_call>`_. Note that LLVM uses the native C
calling conventions by default, allowing these calls to also call into
standard library functions like "sin" and "cos", with no additional
effort.

This wraps up our handling of the four basic expressions that we have so
far in Kaleidoscope. Feel free to go in and add some more. For example,
by browsing the `LLVM language reference <../LangRef.html>`_ you'll find
several other interesting instructions that are really easy to plug into
our basic framework.

Function Code Generation
========================

Code generation for prototypes and functions must handle a number of
details, which make their code less beautiful than expression code
generation, but allows us to illustrate some important points. First,
lets talk about code generation for prototypes: they are used both for
function bodies and external function declarations. The code starts
with:

.. code-block:: c++

    Function *PrototypeAST::Codegen() {
      // Make the function type:  double(double,double) etc.
      std::vector<Type*> Doubles(Args.size(),
                                 Type::getDoubleTy(getGlobalContext()));
      FunctionType *FT = FunctionType::get(Type::getDoubleTy(getGlobalContext()),
                                           Doubles, false);

      Function *F = Function::Create(FT, Function::ExternalLinkage, Name, TheModule);

This code packs a lot of power into a few lines. Note first that this
function returns a "Function\*" instead of a "Value\*". Because a
"prototype" really talks about the external interface for a function
(not the value computed by an expression), it makes sense for it to
return the LLVM Function it corresponds to when codegen'd.

The call to ``FunctionType::get`` creates the ``FunctionType`` that
should be used for a given Prototype. Since all function arguments in
Kaleidoscope are of type double, the first line creates a vector of "N"
LLVM double types. It then uses the ``Functiontype::get`` method to
create a function type that takes "N" doubles as arguments, returns one
double as a result, and that is not vararg (the false parameter
indicates this). Note that Types in LLVM are uniqued just like Constants
are, so you don't "new" a type, you "get" it.

The final line above actually creates the function that the prototype
will correspond to. This indicates the type, linkage and name to use, as
well as which module to insert into. "`external
linkage <../LangRef.html#linkage>`_" means that the function may be
defined outside the current module and/or that it is callable by
functions outside the module. The Name passed in is the name the user
specified: since "``TheModule``" is specified, this name is registered
in "``TheModule``"s symbol table, which is used by the function call
code above.

.. code-block:: c++

      // If F conflicted, there was already something named 'Name'.  If it has a
      // body, don't allow redefinition or reextern.
      if (F->getName() != Name) {
        // Delete the one we just made and get the existing one.
        F->eraseFromParent();
        F = TheModule->getFunction(Name);

The Module symbol table works just like the Function symbol table when
it comes to name conflicts: if a new function is created with a name
that was previously added to the symbol table, the new function will get
implicitly renamed when added to the Module. The code above exploits
this fact to determine if there was a previous definition of this
function.

In Kaleidoscope, I choose to allow redefinitions of functions in two
cases: first, we want to allow 'extern'ing a function more than once, as
long as the prototypes for the externs match (since all arguments have
the same type, we just have to check that the number of arguments
match). Second, we want to allow 'extern'ing a function and then
defining a body for it. This is useful when defining mutually recursive
functions.

In order to implement this, the code above first checks to see if there
is a collision on the name of the function. If so, it deletes the
function we just created (by calling ``eraseFromParent``) and then
calling ``getFunction`` to get the existing function with the specified
name. Note that many APIs in LLVM have "erase" forms and "remove" forms.
The "remove" form unlinks the object from its parent (e.g. a Function
from a Module) and returns it. The "erase" form unlinks the object and
then deletes it.

.. code-block:: c++

        // If F already has a body, reject this.
        if (!F->empty()) {
          ErrorF("redefinition of function");
          return 0;
        }

        // If F took a different number of args, reject.
        if (F->arg_size() != Args.size()) {
          ErrorF("redefinition of function with different # args");
          return 0;
        }
      }

In order to verify the logic above, we first check to see if the
pre-existing function is "empty". In this case, empty means that it has
no basic blocks in it, which means it has no body. If it has no body, it
is a forward declaration. Since we don't allow anything after a full
definition of the function, the code rejects this case. If the previous
reference to a function was an 'extern', we simply verify that the
number of arguments for that definition and this one match up. If not,
we emit an error.

.. code-block:: c++

      // Set names for all arguments.
      unsigned Idx = 0;
      for (Function::arg_iterator AI = F->arg_begin(); Idx != Args.size();
           ++AI, ++Idx) {
        AI->setName(Args[Idx]);

        // Add arguments to variable symbol table.
        NamedValues[Args[Idx]] = AI;
      }
      return F;
    }

The last bit of code for prototypes loops over all of the arguments in
the function, setting the name of the LLVM Argument objects to match,
and registering the arguments in the ``NamedValues`` map for future use
by the ``VariableExprAST`` AST node. Once this is set up, it returns the
Function object to the caller. Note that we don't check for conflicting
argument names here (e.g. "extern foo(a b a)"). Doing so would be very
straight-forward with the mechanics we have already used above.

.. code-block:: c++

    Function *FunctionAST::Codegen() {
      NamedValues.clear();

      Function *TheFunction = Proto->Codegen();
      if (TheFunction == 0)
        return 0;

Code generation for function definitions starts out simply enough: we
just codegen the prototype (Proto) and verify that it is ok. We then
clear out the ``NamedValues`` map to make sure that there isn't anything
in it from the last function we compiled. Code generation of the
prototype ensures that there is an LLVM Function object that is ready to
go for us.

.. code-block:: c++

      // Create a new basic block to start insertion into.
      BasicBlock *BB = BasicBlock::Create(getGlobalContext(), "entry", TheFunction);
      Builder.SetInsertPoint(BB);

      if (Value *RetVal = Body->Codegen()) {

Now we get to the point where the ``Builder`` is set up. The first line
creates a new `basic block <http://en.wikipedia.org/wiki/Basic_block>`_
(named "entry"), which is inserted into ``TheFunction``. The second line
then tells the builder that new instructions should be inserted into the
end of the new basic block. Basic blocks in LLVM are an important part
of functions that define the `Control Flow
Graph <http://en.wikipedia.org/wiki/Control_flow_graph>`_. Since we
don't have any control flow, our functions will only contain one block
at this point. We'll fix this in `Chapter 5 <LangImpl5.html>`_ :).

.. code-block:: c++

      if (Value *RetVal = Body->Codegen()) {
        // Finish off the function.
        Builder.CreateRet(RetVal);

        // Validate the generated code, checking for consistency.
        verifyFunction(*TheFunction);

        return TheFunction;
      }

Once the insertion point is set up, we call the ``CodeGen()`` method for
the root expression of the function. If no error happens, this emits
code to compute the expression into the entry block and returns the
value that was computed. Assuming no error, we then create an LLVM `ret
instruction <../LangRef.html#i_ret>`_, which completes the function.
Once the function is built, we call ``verifyFunction``, which is
provided by LLVM. This function does a variety of consistency checks on
the generated code, to determine if our compiler is doing everything
right. Using this is important: it can catch a lot of bugs. Once the
function is finished and validated, we return it.

.. code-block:: c++

      // Error reading body, remove function.
      TheFunction->eraseFromParent();
      return 0;
    }

The only piece left here is handling of the error case. For simplicity,
we handle this by merely deleting the function we produced with the
``eraseFromParent`` method. This allows the user to redefine a function
that they incorrectly typed in before: if we didn't delete it, it would
live in the symbol table, with a body, preventing future redefinition.

This code does have a bug, though. Since the ``PrototypeAST::Codegen``
can return a previously defined forward declaration, our code can
actually delete a forward declaration. There are a number of ways to fix
this bug, see what you can come up with! Here is a testcase:

::

    extern foo(a b);     # ok, defines foo.
    def foo(a b) c;      # error, 'c' is invalid.
    def bar() foo(1, 2); # error, unknown function "foo"

Driver Changes and Closing Thoughts
===================================

For now, code generation to LLVM doesn't really get us much, except that
we can look at the pretty IR calls. The sample code inserts calls to
Codegen into the "``HandleDefinition``", "``HandleExtern``" etc
functions, and then dumps out the LLVM IR. This gives a nice way to look
at the LLVM IR for simple functions. For example:

::

    ready> 4+5;
    Read top-level expression:
    define double @0() {
    entry:
      ret double 9.000000e+00
    }

Note how the parser turns the top-level expression into anonymous
functions for us. This will be handy when we add `JIT
support <LangImpl4.html#jit>`_ in the next chapter. Also note that the
code is very literally transcribed, no optimizations are being performed
except simple constant folding done by IRBuilder. We will `add
optimizations <LangImpl4.html#trivialconstfold>`_ explicitly in the next
chapter.

::

    ready> def foo(a b) a*a + 2*a*b + b*b;
    Read function definition:
    define double @foo(double %a, double %b) {
    entry:
      %multmp = fmul double %a, %a
      %multmp1 = fmul double 2.000000e+00, %a
      %multmp2 = fmul double %multmp1, %b
      %addtmp = fadd double %multmp, %multmp2
      %multmp3 = fmul double %b, %b
      %addtmp4 = fadd double %addtmp, %multmp3
      ret double %addtmp4
    }

This shows some simple arithmetic. Notice the striking similarity to the
LLVM builder calls that we use to create the instructions.

::

    ready> def bar(a) foo(a, 4.0) + bar(31337);
    Read function definition:
    define double @bar(double %a) {
    entry:
      %calltmp = call double @foo(double %a, double 4.000000e+00)
      %calltmp1 = call double @bar(double 3.133700e+04)
      %addtmp = fadd double %calltmp, %calltmp1
      ret double %addtmp
    }

This shows some function calls. Note that this function will take a long
time to execute if you call it. In the future we'll add conditional
control flow to actually make recursion useful :).

::

    ready> extern cos(x);
    Read extern:
    declare double @cos(double)

    ready> cos(1.234);
    Read top-level expression:
    define double @1() {
    entry:
      %calltmp = call double @cos(double 1.234000e+00)
      ret double %calltmp
    }

This shows an extern for the libm "cos" function, and a call to it.

.. TODO:: Abandon Pygments' horrible `llvm` lexer. It just totally gives up
   on highlighting this due to the first line.

::

    ready> ^D
    ; ModuleID = 'my cool jit'

    define double @0() {
    entry:
      %addtmp = fadd double 4.000000e+00, 5.000000e+00
      ret double %addtmp
    }

    define double @foo(double %a, double %b) {
    entry:
      %multmp = fmul double %a, %a
      %multmp1 = fmul double 2.000000e+00, %a
      %multmp2 = fmul double %multmp1, %b
      %addtmp = fadd double %multmp, %multmp2
      %multmp3 = fmul double %b, %b
      %addtmp4 = fadd double %addtmp, %multmp3
      ret double %addtmp4
    }

    define double @bar(double %a) {
    entry:
      %calltmp = call double @foo(double %a, double 4.000000e+00)
      %calltmp1 = call double @bar(double 3.133700e+04)
      %addtmp = fadd double %calltmp, %calltmp1
      ret double %addtmp
    }

    declare double @cos(double)

    define double @1() {
    entry:
      %calltmp = call double @cos(double 1.234000e+00)
      ret double %calltmp
    }

When you quit the current demo, it dumps out the IR for the entire
module generated. Here you can see the big picture with all the
functions referencing each other.

This wraps up the third chapter of the Kaleidoscope tutorial. Up next,
we'll describe how to `add JIT codegen and optimizer
support <LangImpl4.html>`_ to this so we can actually start running
code!

Full Code Listing
=================

Here is the complete code listing for our running example, enhanced with
the LLVM code generator. Because this uses the LLVM libraries, we need
to link them in. To do this, we use the
`llvm-config <http://llvm.org/cmds/llvm-config.html>`_ tool to inform
our makefile/command line about which options to use:

.. code-block:: bash

    # Compile
    clang++ -g -O3 toy.cpp `llvm-config --cppflags --ldflags --libs core` -o toy
    # Run
    ./toy

Here is the code:

.. code-block:: c++

    // To build this:
    // See example below.

    #include "llvm/DerivedTypes.h"
    #include "llvm/IRBuilder.h"
    #include "llvm/LLVMContext.h"
    #include "llvm/Module.h"
    #include "llvm/Analysis/Verifier.h"
    #include <cstdio>
    #include <string>
    #include <map>
    #include <vector>
    using namespace llvm;

    //===----------------------------------------------------------------------===//
    // Lexer
    //===----------------------------------------------------------------------===//

    // The lexer returns tokens [0-255] if it is an unknown character, otherwise one
    // of these for known things.
    enum Token {
      tok_eof = -1,

      // commands
      tok_def = -2, tok_extern = -3,

      // primary
      tok_identifier = -4, tok_number = -5
    };

    static std::string IdentifierStr;  // Filled in if tok_identifier
    static double NumVal;              // Filled in if tok_number

    /// gettok - Return the next token from standard input.
    static int gettok() {
      static int LastChar = ' ';

      // Skip any whitespace.
      while (isspace(LastChar))
        LastChar = getchar();

      if (isalpha(LastChar)) { // identifier: [a-zA-Z][a-zA-Z0-9]*
        IdentifierStr = LastChar;
        while (isalnum((LastChar = getchar())))
          IdentifierStr += LastChar;

        if (IdentifierStr == "def") return tok_def;
        if (IdentifierStr == "extern") return tok_extern;
        return tok_identifier;
      }

      if (isdigit(LastChar) || LastChar == '.') {   // Number: [0-9.]+
        std::string NumStr;
        do {
          NumStr += LastChar;
          LastChar = getchar();
        } while (isdigit(LastChar) || LastChar == '.');

        NumVal = strtod(NumStr.c_str(), 0);
        return tok_number;
      }

      if (LastChar == '#') {
        // Comment until end of line.
        do LastChar = getchar();
        while (LastChar != EOF && LastChar != '\n' && LastChar != '\r');

        if (LastChar != EOF)
          return gettok();
      }

      // Check for end of file.  Don't eat the EOF.
      if (LastChar == EOF)
        return tok_eof;

      // Otherwise, just return the character as its ascii value.
      int ThisChar = LastChar;
      LastChar = getchar();
      return ThisChar;
    }

    //===----------------------------------------------------------------------===//
    // Abstract Syntax Tree (aka Parse Tree)
    //===----------------------------------------------------------------------===//

    /// ExprAST - Base class for all expression nodes.
    class ExprAST {
    public:
      virtual ~ExprAST() {}
      virtual Value *Codegen() = 0;
    };

    /// NumberExprAST - Expression class for numeric literals like "1.0".
    class NumberExprAST : public ExprAST {
      double Val;
    public:
      NumberExprAST(double val) : Val(val) {}
      virtual Value *Codegen();
    };

    /// VariableExprAST - Expression class for referencing a variable, like "a".
    class VariableExprAST : public ExprAST {
      std::string Name;
    public:
      VariableExprAST(const std::string &name) : Name(name) {}
      virtual Value *Codegen();
    };

    /// BinaryExprAST - Expression class for a binary operator.
    class BinaryExprAST : public ExprAST {
      char Op;
      ExprAST *LHS, *RHS;
    public:
      BinaryExprAST(char op, ExprAST *lhs, ExprAST *rhs)
        : Op(op), LHS(lhs), RHS(rhs) {}
      virtual Value *Codegen();
    };

    /// CallExprAST - Expression class for function calls.
    class CallExprAST : public ExprAST {
      std::string Callee;
      std::vector<ExprAST*> Args;
    public:
      CallExprAST(const std::string &callee, std::vector<ExprAST*> &args)
        : Callee(callee), Args(args) {}
      virtual Value *Codegen();
    };

    /// PrototypeAST - This class represents the "prototype" for a function,
    /// which captures its name, and its argument names (thus implicitly the number
    /// of arguments the function takes).
    class PrototypeAST {
      std::string Name;
      std::vector<std::string> Args;
    public:
      PrototypeAST(const std::string &name, const std::vector<std::string> &args)
        : Name(name), Args(args) {}

      Function *Codegen();
    };

    /// FunctionAST - This class represents a function definition itself.
    class FunctionAST {
      PrototypeAST *Proto;
      ExprAST *Body;
    public:
      FunctionAST(PrototypeAST *proto, ExprAST *body)
        : Proto(proto), Body(body) {}

      Function *Codegen();
    };

    //===----------------------------------------------------------------------===//
    // Parser
    //===----------------------------------------------------------------------===//

    /// CurTok/getNextToken - Provide a simple token buffer.  CurTok is the current
    /// token the parser is looking at.  getNextToken reads another token from the
    /// lexer and updates CurTok with its results.
    static int CurTok;
    static int getNextToken() {
      return CurTok = gettok();
    }

    /// BinopPrecedence - This holds the precedence for each binary operator that is
    /// defined.
    static std::map<char, int> BinopPrecedence;

    /// GetTokPrecedence - Get the precedence of the pending binary operator token.
    static int GetTokPrecedence() {
      if (!isascii(CurTok))
        return -1;

      // Make sure it's a declared binop.
      int TokPrec = BinopPrecedence[CurTok];
      if (TokPrec <= 0) return -1;
      return TokPrec;
    }

    /// Error* - These are little helper functions for error handling.
    ExprAST *Error(const char *Str) { fprintf(stderr, "Error: %s\n", Str);return 0;}
    PrototypeAST *ErrorP(const char *Str) { Error(Str); return 0; }
    FunctionAST *ErrorF(const char *Str) { Error(Str); return 0; }

    static ExprAST *ParseExpression();

    /// identifierexpr
    ///   ::= identifier
    ///   ::= identifier '(' expression* ')'
    static ExprAST *ParseIdentifierExpr() {
      std::string IdName = IdentifierStr;

      getNextToken();  // eat identifier.

      if (CurTok != '(') // Simple variable ref.
        return new VariableExprAST(IdName);

      // Call.
      getNextToken();  // eat (
      std::vector<ExprAST*> Args;
      if (CurTok != ')') {
        while (1) {
          ExprAST *Arg = ParseExpression();
          if (!Arg) return 0;
          Args.push_back(Arg);

          if (CurTok == ')') break;

          if (CurTok != ',')
            return Error("Expected ')' or ',' in argument list");
          getNextToken();
        }
      }

      // Eat the ')'.
      getNextToken();

      return new CallExprAST(IdName, Args);
    }

    /// numberexpr ::= number
    static ExprAST *ParseNumberExpr() {
      ExprAST *Result = new NumberExprAST(NumVal);
      getNextToken(); // consume the number
      return Result;
    }

    /// parenexpr ::= '(' expression ')'
    static ExprAST *ParseParenExpr() {
      getNextToken();  // eat (.
      ExprAST *V = ParseExpression();
      if (!V) return 0;

      if (CurTok != ')')
        return Error("expected ')'");
      getNextToken();  // eat ).
      return V;
    }

    /// primary
    ///   ::= identifierexpr
    ///   ::= numberexpr
    ///   ::= parenexpr
    static ExprAST *ParsePrimary() {
      switch (CurTok) {
      default: return Error("unknown token when expecting an expression");
      case tok_identifier: return ParseIdentifierExpr();
      case tok_number:     return ParseNumberExpr();
      case '(':            return ParseParenExpr();
      }
    }

    /// binoprhs
    ///   ::= ('+' primary)*
    static ExprAST *ParseBinOpRHS(int ExprPrec, ExprAST *LHS) {
      // If this is a binop, find its precedence.
      while (1) {
        int TokPrec = GetTokPrecedence();

        // If this is a binop that binds at least as tightly as the current binop,
        // consume it, otherwise we are done.
        if (TokPrec < ExprPrec)
          return LHS;

        // Okay, we know this is a binop.
        int BinOp = CurTok;
        getNextToken();  // eat binop

        // Parse the primary expression after the binary operator.
        ExprAST *RHS = ParsePrimary();
        if (!RHS) return 0;

        // If BinOp binds less tightly with RHS than the operator after RHS, let
        // the pending operator take RHS as its LHS.
        int NextPrec = GetTokPrecedence();
        if (TokPrec < NextPrec) {
          RHS = ParseBinOpRHS(TokPrec+1, RHS);
          if (RHS == 0) return 0;
        }

        // Merge LHS/RHS.
        LHS = new BinaryExprAST(BinOp, LHS, RHS);
      }
    }

    /// expression
    ///   ::= primary binoprhs
    ///
    static ExprAST *ParseExpression() {
      ExprAST *LHS = ParsePrimary();
      if (!LHS) return 0;

      return ParseBinOpRHS(0, LHS);
    }

    /// prototype
    ///   ::= id '(' id* ')'
    static PrototypeAST *ParsePrototype() {
      if (CurTok != tok_identifier)
        return ErrorP("Expected function name in prototype");

      std::string FnName = IdentifierStr;
      getNextToken();

      if (CurTok != '(')
        return ErrorP("Expected '(' in prototype");

      std::vector<std::string> ArgNames;
      while (getNextToken() == tok_identifier)
        ArgNames.push_back(IdentifierStr);
      if (CurTok != ')')
        return ErrorP("Expected ')' in prototype");

      // success.
      getNextToken();  // eat ')'.

      return new PrototypeAST(FnName, ArgNames);
    }

    /// definition ::= 'def' prototype expression
    static FunctionAST *ParseDefinition() {
      getNextToken();  // eat def.
      PrototypeAST *Proto = ParsePrototype();
      if (Proto == 0) return 0;

      if (ExprAST *E = ParseExpression())
        return new FunctionAST(Proto, E);
      return 0;
    }

    /// toplevelexpr ::= expression
    static FunctionAST *ParseTopLevelExpr() {
      if (ExprAST *E = ParseExpression()) {
        // Make an anonymous proto.
        PrototypeAST *Proto = new PrototypeAST("", std::vector<std::string>());
        return new FunctionAST(Proto, E);
      }
      return 0;
    }

    /// external ::= 'extern' prototype
    static PrototypeAST *ParseExtern() {
      getNextToken();  // eat extern.
      return ParsePrototype();
    }

    //===----------------------------------------------------------------------===//
    // Code Generation
    //===----------------------------------------------------------------------===//

    static Module *TheModule;
    static IRBuilder<> Builder(getGlobalContext());
    static std::map<std::string, Value*> NamedValues;

    Value *ErrorV(const char *Str) { Error(Str); return 0; }

    Value *NumberExprAST::Codegen() {
      return ConstantFP::get(getGlobalContext(), APFloat(Val));
    }

    Value *VariableExprAST::Codegen() {
      // Look this variable up in the function.
      Value *V = NamedValues[Name];
      return V ? V : ErrorV("Unknown variable name");
    }

    Value *BinaryExprAST::Codegen() {
      Value *L = LHS->Codegen();
      Value *R = RHS->Codegen();
      if (L == 0 || R == 0) return 0;

      switch (Op) {
      case '+': return Builder.CreateFAdd(L, R, "addtmp");
      case '-': return Builder.CreateFSub(L, R, "subtmp");
      case '*': return Builder.CreateFMul(L, R, "multmp");
      case '<':
        L = Builder.CreateFCmpULT(L, R, "cmptmp");
        // Convert bool 0/1 to double 0.0 or 1.0
        return Builder.CreateUIToFP(L, Type::getDoubleTy(getGlobalContext()),
                                    "booltmp");
      default: return ErrorV("invalid binary operator");
      }
    }

    Value *CallExprAST::Codegen() {
      // Look up the name in the global module table.
      Function *CalleeF = TheModule->getFunction(Callee);
      if (CalleeF == 0)
        return ErrorV("Unknown function referenced");

      // If argument mismatch error.
      if (CalleeF->arg_size() != Args.size())
        return ErrorV("Incorrect # arguments passed");

      std::vector<Value*> ArgsV;
      for (unsigned i = 0, e = Args.size(); i != e; ++i) {
        ArgsV.push_back(Args[i]->Codegen());
        if (ArgsV.back() == 0) return 0;
      }

      return Builder.CreateCall(CalleeF, ArgsV, "calltmp");
    }

    Function *PrototypeAST::Codegen() {
      // Make the function type:  double(double,double) etc.
      std::vector<Type*> Doubles(Args.size(),
                                 Type::getDoubleTy(getGlobalContext()));
      FunctionType *FT = FunctionType::get(Type::getDoubleTy(getGlobalContext()),
                                           Doubles, false);

      Function *F = Function::Create(FT, Function::ExternalLinkage, Name, TheModule);

      // If F conflicted, there was already something named 'Name'.  If it has a
      // body, don't allow redefinition or reextern.
      if (F->getName() != Name) {
        // Delete the one we just made and get the existing one.
        F->eraseFromParent();
        F = TheModule->getFunction(Name);

        // If F already has a body, reject this.
        if (!F->empty()) {
          ErrorF("redefinition of function");
          return 0;
        }

        // If F took a different number of args, reject.
        if (F->arg_size() != Args.size()) {
          ErrorF("redefinition of function with different # args");
          return 0;
        }
      }

      // Set names for all arguments.
      unsigned Idx = 0;
      for (Function::arg_iterator AI = F->arg_begin(); Idx != Args.size();
           ++AI, ++Idx) {
        AI->setName(Args[Idx]);

        // Add arguments to variable symbol table.
        NamedValues[Args[Idx]] = AI;
      }

      return F;
    }

    Function *FunctionAST::Codegen() {
      NamedValues.clear();

      Function *TheFunction = Proto->Codegen();
      if (TheFunction == 0)
        return 0;

      // Create a new basic block to start insertion into.
      BasicBlock *BB = BasicBlock::Create(getGlobalContext(), "entry", TheFunction);
      Builder.SetInsertPoint(BB);

      if (Value *RetVal = Body->Codegen()) {
        // Finish off the function.
        Builder.CreateRet(RetVal);

        // Validate the generated code, checking for consistency.
        verifyFunction(*TheFunction);

        return TheFunction;
      }

      // Error reading body, remove function.
      TheFunction->eraseFromParent();
      return 0;
    }

    //===----------------------------------------------------------------------===//
    // Top-Level parsing and JIT Driver
    //===----------------------------------------------------------------------===//

    static void HandleDefinition() {
      if (FunctionAST *F = ParseDefinition()) {
        if (Function *LF = F->Codegen()) {
          fprintf(stderr, "Read function definition:");
          LF->dump();
        }
      } else {
        // Skip token for error recovery.
        getNextToken();
      }
    }

    static void HandleExtern() {
      if (PrototypeAST *P = ParseExtern()) {
        if (Function *F = P->Codegen()) {
          fprintf(stderr, "Read extern: ");
          F->dump();
        }
      } else {
        // Skip token for error recovery.
        getNextToken();
      }
    }

    static void HandleTopLevelExpression() {
      // Evaluate a top-level expression into an anonymous function.
      if (FunctionAST *F = ParseTopLevelExpr()) {
        if (Function *LF = F->Codegen()) {
          fprintf(stderr, "Read top-level expression:");
          LF->dump();
        }
      } else {
        // Skip token for error recovery.
        getNextToken();
      }
    }

    /// top ::= definition | external | expression | ';'
    static void MainLoop() {
      while (1) {
        fprintf(stderr, "ready> ");
        switch (CurTok) {
        case tok_eof:    return;
        case ';':        getNextToken(); break;  // ignore top-level semicolons.
        case tok_def:    HandleDefinition(); break;
        case tok_extern: HandleExtern(); break;
        default:         HandleTopLevelExpression(); break;
        }
      }
    }

    //===----------------------------------------------------------------------===//
    // "Library" functions that can be "extern'd" from user code.
    //===----------------------------------------------------------------------===//

    /// putchard - putchar that takes a double and returns 0.
    extern "C"
    double putchard(double X) {
      putchar((char)X);
      return 0;
    }

    //===----------------------------------------------------------------------===//
    // Main driver code.
    //===----------------------------------------------------------------------===//

    int main() {
      LLVMContext &Context = getGlobalContext();

      // Install standard binary operators.
      // 1 is lowest precedence.
      BinopPrecedence['<'] = 10;
      BinopPrecedence['+'] = 20;
      BinopPrecedence['-'] = 20;
      BinopPrecedence['*'] = 40;  // highest.

      // Prime the first token.
      fprintf(stderr, "ready> ");
      getNextToken();

      // Make the module, which holds all the code.
      TheModule = new Module("my cool jit", Context);

      // Run the main "interpreter loop" now.
      MainLoop();

      // Print out all of the generated code.
      TheModule->dump();

      return 0;
    }

`Next: Adding JIT and Optimizer Support <LangImpl4.html>`_

redpajama_set_name: RedPajamaGithub


A leading insurance business has recently opened a new office in Birmingham and is therefore going through a substantial period of growth. Eventually employing around 70 staff it will become a major employer in Birmingham City Centre and offer great opportunity for longer term career progression.
With operations in London and around the world the new office in Birmingham will handle back office activities for the areas of Claims, Underwriting, IT and Finance.
They seek to hire an Insurance Administrator to assist in ensuring the delegated authority processes and procedures are followed and kept up to date. You will assist with the review of new and renewal delegated contracts in line with the agreed approval process, including timely collection, analysis and recording of internal and third party due diligence information and documentation, co-ordinating with key stakeholders and escalating issues where appropriate.
This will suit candidates who are not looking for a position in customer services and have a preference to focus on the administrative duties. You will manage your own workflow and those who can handle and produce accurate data.
Employee benefits include free gym membership, free travel to work and the opportunity to work in one of Birmingham finest new office developments.
Candidates should have 5 GCSEs at grade C and above and have an administrative background in insurance or finance type organisations.


text:
Verne Allen Duncan (born April 6, 1934) is an American politician from the state of Oregon. As an educator and moderate Republican, he has become outspoken in protest of policies of his own party he views as extreme.

A former classroom teacher, principal, district superintendent and professor, Duncan has served in the legislatures of two states, Idaho and Oregon, held the office of Oregon Superintendent of Public Instruction, and served as a college dean.

Early life
Born and raised in McMinnville, Duncan is a member of a pioneer Oregon family.  His grandfather, S.S. Duncan, had been a teacher and for many years was superintendent of schools for Yamhill County.  His uncle was Leland Duncan, long-time district attorney of Harney County, Oregon.

As a schoolboy, Duncan had occasion to visit the state Department of Education on a class trip.  When he needed a workspace on which to take down some notes, then-superintendent Rex Putnam rose from his desk and offered it to the young Duncan.  Neither knew the boy would grow up to occupy that desk for fifteen years as superintendent himself.

After completing a public school education, including graduation from McMinnville High School, he attended Linfield College in McMinnville, Oregon. Duncan served in the United States Army, remaining active in the reserves, ultimately attaining the rank of colonel.  Duncan graduated from Idaho State College, earning a B.A. in 1960, and began a long career in education.  He would ultimately earn several graduate degrees, including an M.Ed. in Education Administration from the University of Idaho, a PhD in Public School Administration from the University of Oregon and an M.B.A. in Labor Management from the University of Portland.

Career in education and politics
Duncan began his teaching career in the Butte County Public Schools in Arco, Idaho, in 1954. He subsequently became a principal and later the superintendent of schools. Before serving as superintendent, he was elected to the state legislature, serving from 1962 to 1965. He then completed his Ph.D. at the University of Oregon and after a short interim on the faculty at the University became the Superintendent of Schools of the Clackamas County Intermediate Education District. In 1974, he was elected State Superintendent of Schools. After his four-term tenure as Oregon's Superintendent of Public Instruction, Duncan returned to teaching in 1990, serving as dean of the University of Portland's School of Education until 1996, when he took emeritus professor status. He was appointed the following year by Governor Kitzhaber to fill a vacancy in the Oregon State Senate, and was elected to serve a full four-year term in 1998 after defeating Monroe Sweetland in the November election.

As a politician, Duncan took positions which placed him in the progressive or moderate wing of the Oregon Republican Party, as were many of his immediate predecessors and contemporaries, including the likes of Tom McCall, Clay Myers, Bob Packwood and Mark Hatfield. He supported the creation of Metro, voted for Governor Kitzhaber's transportation package, and was on record as pro-choice and in favor of nondiscrimination laws for gays, prompting Willamette Week to characterize him as "a moderate's moderate," in its 1998 editorial endorsement.

In a 2000 interview with The Oregonian, Duncan admitted to having voted personally for both Republican and Democratic presidential candidates, refusing to give particulars, but indicating that he was an enthusiastic supporter of George H. W. Bush but not his son.  He also told the reporter that the Republicans must become more inclusive and less extreme.  "Sometimes it doesn't hurt to lose," he said. "It keeps you humble."

Legacy
In 2008, the North Clackamas School District named a new elementary school in Duncan's honor. Duncan lives in Oak Grove, within the District, and had served as district superintendent.

References
Specific

General
 "Verne Duncan." Carroll's State Directory. Carroll Publishing, 2006. Reproduced Biography Resource Center. Farmington Hills, Mich.: Thomson Gale. 2006.  (Subscription required). Retrieved on 2006-12-20.

1934 births
Living people
People from McMinnville, Oregon
Idaho State University alumni
Republican Party Oregon state senators
Oregon Superintendents of Public Instruction
Republican Party members of the Idaho House of Representatives
University of Idaho alumni
University of Oregon alumni
University of Portland alumni
People from Milwaukie, Oregon
Educators from Oregon
People from Oak Grove, Oregon
People from Butte County, Idaho

redpajama_set_name: RedPajamaWikipedia


Product description: Essentials of Spinal Disorders is written by Jason c eck and published by Jaypee brothers. Buy Essentials of Spinal Disorders by Jason c eck from markmybook.com. An online bokstore for all kind of fiction, non fiction books and novels of English, Hindi & other Indian Languages.


Jasper rises from one of San Francisco's 7 original hills offering sweeping views of Downtown, SoMa, the Bay Bridge + San Francisco Bay through floor to ceiling glass. The 40-story building, which sits almost at the crest of Rincon Hill, makes a serious impact on the surrounding skyline considering the fact that Rincon Hill is approximately 100 feet (30 m) tall.
Head for the hills, take in the views and do a little exploring. 7×7 Magazine shares 'What to do on SF's 7 Original Hills', including our very own Rincon Hill. If you live or work downtown, Rincon Hill is full of Privately Owned Public Open Spaces (POPOS) to explore. On weekdays, grab a handcrafted sandwich from The Sentinel and hang out inside the 101 Second Street Atrium, a space that's part greenhouse, part art gallery, featuring a two-story bronze statue and free Wi-Fi from a nearby coffee shop.
Rincon Hill is a compact district of San Francisco tucked between SoMa and the Embarcadero. The neighborhood is bounded by Folsom Street to the north, the Embarcadero to the east, Bryant Street on the south, and Essex Street to the west. Located just south of the Transbay development area, part of the greater South of Market area, the landscape is dotted with cranes in the sky soon to bring fresh amenities, convenience and new neighbors. Did you know? The word "Rincon" means "inside corner" in Spanish. Before the 1860's the area surrounding Rincon Center was a cove that extended to what is now First Street. Rincon is the name that was given to the hill at the inside corner of the cove.
Spot Jasper. Play an architectural version of "Where's Waldo?". Jasper commands attention from various points throughout the City. While you're exploring the neighborhood try spotting Jasper from a variety of spots in and around the neighborhood. Snap a photo of your Jasper sighting and tag us on Instagram @rentjasper.
Crowning Rincon Hill, the location offers easy access to regional transportation—101, Interstate 80, the Transbay Terminal and Caltrain – and popular neighborhoods, including the Financial District, SoMa and Mission Bay. Be sure to follow Jasper on Facebook, Twitter and Instagram as we share news and updates about our exciting new community. #rentjasper It's a heck of a place to call home.


It's a very sad day not just in the sports world, but the world in general, as it has been announced Muhammad Ali has passed away [Friday, June 3, 2016] at the age of 74.
The boxing great was hospitalized in Phoenix, AZ with reports stating he was suffering from respiratory issues. His stay at the hospital progressively worsened and he succumbed to his illness. Initially, Ali family spokesperson Bob Gunnel told media the boxing great's condition was fair and a brief hospital stay was expected.
Having been hospitalized several times in recent years, being treated for a severe urinary tract infection, which is originally diagnosed as pneumonia, Ali had been battling through illnesses often associated with old age. Often referred to as The G.O.A.T., for Greatest Of All Time, Ali was diagnosed with Parkinson's Disease during the 1980s, an affliction that progressively worsened over the years.
Outside of his iconic bouts against the likes of Joe Frazier and George Foreman, Ali was further immortalized for his gift of gab, rhyming on command, which lends some to credit as the first person to ever rhyme in a fashion that inspired rap music. "Float like a butterfly, sting like a bee!" "Rumble young man! Rumble!" and "The champ is here!" were all some of his most notable phrases. Born Cassius Clay on January 17, 1942, he later converted to Islam, changing his name and even befriending Malcolm X.
One of the most memorable moments of Ali's life was in 1996 when he was badly trembling while holding the Olympic torch in Atlanta. The champ was also further immortalized in his critically acclaimed biopic Ali, where he was portrayed by Will Smith. His last public appearance occurred in October 2015 when he appeared at a special Sports Illustrated tribe to him at the Muhammad Ali Center in his hometown of Louisville, Kentucky.


While three of the four eyewitnesses have spoken in favour of the police in the Chembur custodial death case, the fourth witness, Ibrahim Malik, has claimed that Mohammad Naushad Hussain Khan, 43, was brutally assaulted with a bat, stumps, chain and was even hung upside down.
Khan and Malik were picked up from Shivaji Nagar in Govandi on Saturday for questioning in connection with a theft case. Four witnesses, including three detainees and one policeman, were present while Khan was being questioned. During the questioning, the policemen beat up Khan that led to bleeding, alleged Malik. Khan was rushed to the Sion hospital around 1.30am on Sunday, where he was declared dead on arrival.
Two of the accused have told the police that Khan had banged his head on the wall and also repeatedly hit himself with the handcuff, said sources. Malik, however, maintained that Khan was assaulted with a bat. Officials from the crime branch said they had recorded the statements of the four witnesses.
The post-mortem report obtained earlier said that Khan had an injury above the forehead. Khan's viscera has been preserved as the cause of death is not clear from the report, sources said. The police are awaiting a report from the JJ hospital, before further action.
According to sources, there were bloodstains on the walls and the rod of the room, where Khan was being questioned at the Chembur police station, said sources.
Police have registered a case of accidental death and the crime branch has begun its probe into the incident. Head constable Dilip Sawant and police constable Sanjay Dhale, who were questioning Khan, have been suspended for preliminary negligence of the Supreme Court guidelines.
The crime branch unit six – which is investigating the case -- is also checking if the station dairy had the record of Khan being detained for questioning. Officials claimed Khan's relatives were informed when he was picked up for questioning. They said that he was detained as he had several offences registered against him.


This fully irrigated Adirondack Mountain course was established in 1896 and is one of America's oldest golf courses. 9-holes are surrounded by beautiful pines and scenic mountain views. On-site are a restaurant and pro shop.
Established in the 1920's, this 9 hole golf course is fun and challenging at an affordable price. Tee Times accepted on weekends. Practice Range, Driving Range, Pro Shop, Restaurant and Cocktail Lounge also available.
Tupper Lake Country Club is home to a beautiful 18-hole golf course designed by Donald Ross. An event space called The 19th Hole is perfect for wedding receptions.
This 9-hole golf course is a typical Adirondack course featuring scenic fairways and manicured greens. The course is par 36 and is great for golfers of all skill levels.
Located in the Southern Adirondacks, Green Mansions Golf Club features nine challenging holes, plus a driving range and pro shop. Looking for added excitement? Try one of their night time golf outings by flashlight!
This 18-hole course has 4 sets of tees to welcome players of all levels A classic Scottish design by Seymour Dunn, this club is both beautiful and challenging. Continental breakfast is available when you book Golf & Stay packages.
Family owned and operated 9-hole golf course designed by Seymour Dunn. Walk ons welcome!
9-hole golf course that follows along the flowing Cedar River backed with beautiful Adirondack views. Stay and play at the on-site motel or stop in for lunch at their restaurant. Only one mile from the town of Indian Lake.
This is an 18-hole championship golf course with a practice range, putting green, lounge, and banquet facilities.
At America's third oldest golf course, enjoy an 18-hole championship course and even stay and play at on-site lodging.
A unique 18-hole course in Lord Howe Valley on the north end of Lake George. Players of all skill levels are welcome at this public course.


text:
We now return you to 2015, already in progress
The internet ate my writeup of Still Alice, but to sum up: if you'd told me that one of the year's most emotionally evocative scenes would involve Kristen Stewart delivering a monologue from Angels in America, I'd have assumed you were talking about the SNL reunion.
Same rules as usual this year, only I've expanded each category to five joint "winners" plus the usual sleepers (because there were a lot of great performances and productions this time around, and of such varying style). I've done away with the Body of Work category, because it's too much to keep track of, and assumes that I see absolutely everything, which I can't. Note that "Favorite Characters" cannot be portrayals of real people. I've added "The Unseen" and "The Unsung," which comprise, respectively, the movies I wanted to see but did not have a chance to, and the movies I saw but for whatever reason did not write about on the blog (these reasons range from losing a file to not having time to simple disinterest – I don't make money on this [but you could change that if you really wanted to: paypal billyramoneFTW at gmail). Use the left-hand navigation or the infinite down-scroll to check out my writeups of each film.
A Most Violent Year
Sleepers: Wild and The Imitation Game
Charlotte Gainsbourg as Joe – Nymphomaniac
Jessica Chastain as Miss Julie – Miss Julie
Mia Wasikowska as Robyn Davidson – Tracks
Tilda Swinton as Eve – Only Lovers Left Alive
Julianne Moore as Alice Howland – Still Alice
Sleeper: Reese Witherspoon as Cheryl Strayed – Wild
David Oyelowo as Martin Luther King, Jr. – Selma
Colin Farrell as John – Miss Julie
Philip Seymour Hoffman as Gunther Bachman – A Most Wanted Man
Tom Hardy as Ivan Locke – Locke
Benedict Cumberbatch as Alan Turing – The Imitation Game
Sleeper: Ralph Fiennes as M. Gustave – The Grand Budapest Hotel
Rachel McAdams as Annabel Richter – A Most Wanted Man
Carmen Ejogo as Coretta Scott King – Selma
Kristen Stewart as Lydia Howland – Still Alice
Emma Stone as Sam Thomson – Birdman
Samantha Morton as Kathleen – Miss Julie
Sleeper: Stacy Martin as Young Joe – Nymphomaniac
Elyes Gabel as Julian – A Most Violent Year
LaKeith Lee Stanfield as Jimmie Lee Jackson – Selma
J.K. Simmons as Terence Fletcher – Whiplash
Edward Norton as Mike Shiner – Birdman
Tony Revolori as Zero Mustafa – The Grand Budapest Hotel
Sleeper: Matthew Goode as Hugh Alexander – The Imitation Game
Ava DuVernay – Selma
Liv Ullmann – Miss Julie
Lars von Trier – Nymphomaniac
Alejandro González Iñárritu – Birdman
J.C. Chandor – A Most Violent Year
Gillian Robespierre – Obvious Child
Ava DuVernay/Paul Webb – Selma
Jim Jarmusch – Only Lovers Left Alive
Eleanor Rigby (played by Jessica Chastain) – The Disappearance of Eleanor Rigby
Eve, Adam, and Ava (played by Tilda Swinton, Tom Hiddleston, and Mia Wasikowska) – Only Lovers Left Alive
Best Cameo
William Mapother as the Preacher – I Origins
Persona non Grata Forever
Boyhood, The Theory of Everything, Camp X-Ray, Big Eyes, Two Days-One Night, Ida, Winter Sleep
Ragnarok, Still Alice, Into the Woods, The Big Ask
Best use of "Chastaining"
Well, Jessica Chastain was in four films this year, and she "Chastained" in one of them (The Disappearance of Eleanor Rigby), so I can't in good conscience give this award to anyone else. In a close second, however, are Michael Pitt and Nina Arianda in Rob the Mob.
That does it for 2014. If we ever meet, let's talk about movies. See you this year! -RH
Categories: Uncategorized . Tags: 2014 films, 2015 oscars, a most violent year, a most wanted man, action, angels in america, best 2014 films, best 2014 movies, big eyes, birdman, boyhood, camp x-ray, chastaining, i origins, ida, into the woods, jessica chastain, miss julie, nymphomaniac, obvious child, one night, only lovers left alive, ragnarok, selms, snl reunion, still alice, the big ask, the grand budapest hotel, the imitation game, the theory of everything, tracks, two days, whiplash, wild, winter sleep . Author: Richard . Comments: Leave a comment
The Big Bang Theory, ca. 1941
People love underdog stories, especially when the underdogs are eccentric loners, so I don't begrudge screenwriter Graham Moore and director Morten Tyldum for embellishing details of Alan Turing's personal life – you have to do some invention when it comes to his relationship with Joan Clarke, because we need Keira Knightley to be in it a lot, and the film needs to "say something" about her situation. You need to trim the Bletchley Park cryptographers down to a ragtag band of misunderstood do-gooders, because it makes people think of Star Wars and El Dorado and everything else they like. You need to create conflict amongst this group, because a bunch of coworkers getting along for two full hours is 1) boring; 2) not analogous to the real-life experiences of the current working class. But portraying Turing as being somewhere on the autism spectrum (when by all accounts he was not) does something interesting: because of series like The Big Bang Theory and other popular media that employ the cutesy, popcorny method of depicting people with Asperger's as asexual geeks who happen to be geniuses, and whose personal struggles (common TV/movie ones include inabilities to understand jokes and sarcasm, lack of interest in socializing, and complete immunity to romance) make them adorable and endearing, plenty of laypeople think they know everything about an extremely varied mental condition that affects people differently depending upon myriad factors, including personality. On the way out of the theatre, one of the chatty people in the row behind me made this comment: "I think he was just confused about what he was." Mind you, Turing (played by Benedict Cumberbatch in the film) utters the line "I am a homosexual" several times to several different people, says "I prefer men, not women" and "I have had affairs with men," is shown in an almost-romance with a boy during adolescence, and does not deny his sexuality when he is criminally prosecuted for "gross indecency" (i.e. happening to love the company of the same gender). So it's partly a basic comprehension problem, but it's also media damage: how many Emmys has Jim Parsons won for playing the lovable nerd upon whom so many now base their "knowledge" of Asperger's? True, the people in the row behind me are not a very large sample size, but these micro-cases illustrate the larger problem: passive, casual media being taken as fact, and dangerous ignorance about serious subjects as a product of a popular TV show.
The Imitation Game follows Turing and his team's attempt to break Nazi Germany's Enigma code, thereby shortening World War II and saving millions of lives. The story movement involves slightly-higher-than-garden-variety mystery stuff, and is buffered by a very personable cast: Matthew Goode plays Hugh Alexander, Turing's main foil in the group, which includes Peter (Matthew Beard), Jack Good (James Northcote), John Cairncross (Allen Leech), and most importantly, Joan Clarke (Knightley), who shows up to Turing's all-but-impossible mass interview for a new cryptographer, resists sexist comments, and aces the test more efficiently than even its creator can. All the while, the group combats antagonism from their commanding officer, Alastair Denniston (Charles Dance doing what he does), whose motivation is to have the last word, no matter what, even if it allows the Nazis to destroy the world, apparently. Soon, Turing and Joan become engaged so that she can stay and continue her invaluable work on the Enigma project – her overbearing parents are concerned about her being a single career-woman – and despite reservations on both sides, they care for each other and have each other's backs in every way. From there, as Turing puts together a machine named after his childhood almost-boyfriend Christopher, who died of tuberculosis, the team grows closer.
Despite the minor female presence in the film, interestingly enough, Turing's biggest epiphanies occur as a result of female influence. Joan's ideas fuel much of the anti-Enigma project's success, and it's a passing comment from Helen (Tuppence Middleton), a friend of Joan's who flirts with Hugh, that causes a major turning point in Turing's thinking (which allows Cumberbatch to do the always-fun "Epiphany causes main character to rush out of room, crashing into as many people and breakable things as possible in the process"). Knightley controls all of her scenes, and one of the toughest things about watching the film is that her Joan Clarke could be the protagonist of her own film (and she's layered enough that we get the sense that she's leading an offscreen film we never get to see). The scene wherein she obliterates all thought that a woman can't do this job is triumphant, but these scenes can be problematic in period pieces, and I'm not talking about her victory as much as the language used (and this was also a big issue in HBO's Boardwalk Empire): filmmakers create these spectacles with the intention of looking smugly upon the awful ways the patriarchal/Christian power structures treated certain people in the past, without thinking about the ways in which these are still issues for us in the present. Add to that the fact that the target audience for many of these narratives (adolescent boys) are still feeling things out (i.e. largely clueless to the struggles of women and people of other cultural backgrounds), and when they're being constantly fed this stuff, this type of language becomes normalized now. It isn't enough to just show things "how they were" when you're attempting to illustrate how far we've come, or how certain revolutionaries and hero(ine)s were crushing the status quo: in art, in order to say something, you have to actually say it.
The crown jewel of The Imitation Game, unsurprisingly, is Benedict Cumberbatch's performance, which all at once honestly portrays the struggles of a gay government employee in the '40s (and respects the real-life Turing by not showing sex scenes or taking sharp turns into conjecture/invention) and the difficulties of being that fish out of water, taken to the extreme with the personality prescribed to him by the filmmakers. His last scene with Knightley, highlighting the development of their friendship and trust over the years of (and following) the war, is amongst the most emotional of the year. It's incredible that a story like this can be buried for fifty years, while borderline propaganda like American Sniper gets greenlit to glorify violence and accessorize women within a few years of its supposed real-life events. With The Imitation Game, we have a rarity: a war drama that does not suggest that a sainted soldier – rugged, white, heterosexual, male, American – was responsible for the greatest heroics. It's responsibly told, well-characterized, and has the only end-title "where are they now" sequence at which I've ever teared up.
The Imitation Game (2014); based on the book Alan Turing: The Enigma by Andrew Hodges; screenplay by Graham Moore; directed by Morten Tyldum starring Benedict Cumberbatch, Keira Knightley, Matthew Goode, and Mark Strong.
Categories: Films . Tags: 2014 films, alan turing, alan turing: the enigma, allen leech, andrew hodges, asperger's syndrome, benedict cumberbatch, bletchley park, charles dance, el dorado, graham moore, james northcote, jim parsons, keira knightley, Mark Strong, matthew goode, morten tyldum, nazi germany, portrayal of asperger's in movies, star wars, the big bang theory, the imitation game, tuppence middleton, world war 2, world war II films . Author: Richard . Comments: Leave a comment

redpajama_set_name: RedPajamaCommonCrawl


Have you received a text message or phone call from (01706) 311937? Read the comments below to determine who is calling from this phone number. Please share any additional information by posting a comment below.
The phone number 01706311937 appears to be registered with a phone company. The number is located in Rochdale, in The United Kingdom.
The phone number (01706) 311937 has the area code 01706 which appears to be registered with a phone company and that is good news. Often times, telemarketers and spammers will use phone numbers that are very similar to yours with the last few digits changed. If you receive a phone call from a number you don't recognize and it is almost identical to yours, you should be careful answering or returning the call. Only answer or call the number back if you know who is calling and check back here often for any new comments posted below. If you do know who is calling from (01706) 311937, please let everyone know by posting a comment below.
Is (01706) 311937 Safe to Answer or a Spam Caller?
Comment: Have you received a phone call, text, or fax from 01706311937? Please leave a comment about it below.
Often telemarketers use similar phone numbers to make their calls so checking phone numbers around (01706) 311937 can help determine who is calling.
(01706) 314069: Received call but no message.
(01706) 314077: This company phoned me to ask if I had claimed my PPI claim! I have never had PPI. He said that he is not allow to tell lies, weel obviously he does. Then he became very argumentive. I hung up.


text:
Maine Voices
Maine Voices: Nordic Aquafarms isn't acting like a good neighbor to Belfast residents
Its continual changes of plan and apparent misrepresentation of its land rights should raise questions among regulators.
By Jeffrey Mabee and Judith GraceSpecial to the Press Herald
BELFAST — For the past 25 years, we have owned the shorefront property directly across Route 1 from the Belfast Water District, where Nordic Aquafarms is now hoping to build its salmon farm. A recent search of land records that was conducted by Upstream Watch, a Belfast-based group opposed to Nordic Aquafarms, showed that we also own the intertidal area in front of the three neighboring properties. This includes the area that Nordic Aquafarms shows, in its application to the Maine Bureau of Parks and Lands, as the place it plans to cross to reach Penobscot Bay with its intake and effluent discharge pipes.
Why some Maine coastal communities are up in arms about aquaculture
A May 8 post on Nordic Aquafarms' Facebook page stated, referring to Upstream Watch: "They have also in their crusade revealed that some shoreline owners do not own their intertidal, which may be an unpleasant surprise to some owners. We withheld our surveys when we became aware of this situation some months back – it was not our role to reveal such sensitive information to the community and owners. Some of these shoreline owners might have wanted to acquire rights to their intertidal, while Upstream Watch is now trying to take control of them. Is this how fellow citizens treat each other in this town? We think the majority would not."
Jeffrey Mabee and Judith Grace are residents of Belfast.
This post demonstrates that Nordic Aquafarms knew there were ownership issues when it applied to the Bureau of Parks and Lands to lay its pipes across this intertidal zone. We think it would have been much more neighborly and ethical if Nordic Aquafarms had talked with us some months back when the company found out from its own surveys that there were potential ownership issues.
This treatment feels disrespectful to us and not what we would expect from a business that wants to be a good neighbor. But it isn't the first time we have questioned how Nordic Aquafarms will do business if this project receives state approval and moves forward.
Norwegian company to build large, land-based salmon farm in Belfast
Nearly a year ago, when Nordic Aquafarms first presented its plans for a land-based salmon farm to the Belfast community, we were open to the possibility that Nordic Aquafarms might be a viable business to have in our town. Nordic Aquafarms talked about its effluent pipe going a mile out into the bay where there would be "deep ocean currents" to disperse what little thoroughly treated water they were putting into the bay. Nordic Aquafarms said it would be "drilling horizontally" under the highway, the land and the beach, with no disruption to the upland surface and intertidal zone.
As time went on, the company dropped and changed one after another of the plans that had made it sound like a clean and responsible business for our community. The company's effluent pipe, it turned out, would be dumping 7.7 million gallons a day of warm (59 to 64.4 degrees Fahrenheit) wastewater in the bay – more than neighboring Bayside is authorized to dump in a year. This water, containing 1,484 pounds of nitrogen per day, as well as another 400 pounds of suspended solids and other chemicals, would be discharged through a pipe that has been shortened by over a third and will be many miles away from any "deep ocean currents." Plans for underground horizontal drilling were changed to digging trenches over shoreland property and intertidal areas. (See upstreamwatch.org for more information.)
Read more Maine Voices columns
Eventually, we began to wonder if we could be certain that anything Nordic Aquafarms said would turn out to be true. And then we learned that it had apparently hidden the truth about our ownership of the intertidal property the company planned to cross. If any business is using our beautiful Penobscot Bay for any part of its production, we want it to be people who have a track record of honesty, integrity and following through on their stated plans to take good care of the environment and to be good, respectful neighbors.
aquaculture, belfast maine, maine voices, opinion, penobscot bay, pollution


text:
The map only displays records that have geographic information. Switch to the grid view to see all records.
13th Bomb Squadron in New Guinea on 1 August 1943
Photograph. 13th Bomb Squadron in New Guinea on 1 August 1943. "This is a group picture taken a few days ago. I'm...
The pilot of Hick's Hedge Hopper, a Mitchell B-25, smiles for the camera as his plane taxis down the runway in 1943
Photograph. The pilot of Hick's Hedge Hopper, a Mitchell B-25, smiles for the camera as his plane taxis down the runway...
A soldier rests on his cot in a tent in New Guinea in 1943
Photograph. A soldier rests on his cot in a tent in New Guinea. "This is me for 3 days after I got back." 1943
Two soldiers pose in front of the B-24D "Ready, Willing and Able" 42-41078 in 1943
Photograph. Two soldiers pose in front of the B-24D "Ready, Willing and Able" 42-41078 in 1943.
Soldiers and a dog cool off by taking a dip in the water in 1943
Photograph. Soldiers and a dog cool off by taking a dip in the water in 1943.
A tent holds the uniform of a staff sergeant in 1943
Photograph. A tent holds the uniform of a staff sergeant in 1943
An unknown soldier at a camp in New Guinea in 1943
Photograph. An unknown soldier at a camp in New Guinea in 1943.
Soldier Benjamin E. Howze, far left, poses with two fellow soldiers in 1943
Photograph. Soldier Benjamin E. Howze, far left, poses with two fellow soldiers. "This is the only picture I have right...
Benjamin E. Howze, center, poses with two friends in 1943
Photograph. Benjamin E. Howze, center, poses with two friends in 1943
Nose art for B-24D-53-CO Liberator named "Mission Belle" in 1943
Photograph. Nose art for B-24D-53-CO Liberator named "Mission Belle" Serial Number 42-40389. 1943
U.S. soldiers prepare to take a swim in 1943
Photograph. U.S. soldiers prepare to take a swim. 1943
A damaged Japanese Mitsubishi A6M Zero in 1943
Photograph. A damaged Japanese Mitsubishi A6M Zero. 1943


The Triumph hot tub is a beautifully designed double lounger spa that comfortably fits four people and everyone has his/her own foot space!
The Moto-Massage DX lounge not only delivers a great back massage but also offers great foot therapy with two Precision™ jets for each foot and easy access to the auxiliary control panel.
The entry-lounge, features the Quartet™ jet system, four HydroStream and four powerful Precision calf jets. It doesn't stop here, the generous bench seat offers one seat with two Soothing Seven™ jets, the other with a six Jet-Cluster™ and from both vigorous foot treatment is available through our unique FootStream™ jet.
A convenient cool down ledge offers yet one more way to enjoy this fully featured spa. The Triumph is 188 × 236 × 84 cm, has three TriX™ filters and it's single speed 2.0 HP pump with one SmartJet™ diverter valve powers a total of 27 jets.
Choose from six cabinet finishes and designer shell colour combinations for a wide range of styles, from traditional to cutting-edge contemporary.
Only available from Hot Spring, Highlife® Collection models filter 100% of the water 100% of the time, even when the jets are on. And with the longer lasting, more efficient Tri-X filters, you can enjoy cleaner water with less maintenance because these filters are dishwasher safe.
Fill in the form below to request a quote from our friendly sales team.
I consent to Hotspring World storing my personal data.


The Bible urges Christians to watch for Christ's coming, and that command seems utterly urgent to me as the world's moral, economic, and political free-fall accelerates. Social acceptance of sin is rapidly increasing. At the same time, the world economy skitters through one crisis after another while ruthless terrorists gain control of expanding territories, and the world could be one large disaster away from a devastating socio-economic upheaval. And politicians and media serve their own interests while the world burns.
Fellow Christians, we must watch and pray, interceding for the salvation of all who will come to Christ. There may be very little time left.
I believe that Christ will soon come to rapture His bride the church up to heaven for the wedding supper of the Lamb. While the church celebrates with Christ (Rev. 19), the Tribulation will engulf the earth. Evil forces will be released, and God's judgments will fall upon a rebellious world.
During the Tribulation, God's people will suffer intense persecution and, for many, cruel martyrdom. At this time, God will particularly turn His attention to the fulfillment of His covenant with Abraham. Based on His promises in scripture, a remnant of Jews will turn to Christ and be saved during this terrible time. The Antichrist, under the inspiration of Satan, will lead his armies against Jerusalem, seeking to wipe Israel from the earth (Eze. 38-39; Zech. 14). At this crucial time, Christ will return with His bride to save Jerusalem and the remnant of Jewish believers. He will crush the armies arrayed against the Holy City and set up His millennial kingdom in Jerusalem (Zech. 14; Rev. 19-20).
I recommend the following teachings to those who would like to study last-day events. The creators of these resources (and other resources presented later in this article) represent a variety of perspectives, so differences should be expected. In fact, some resources may disagree rather vigorously with others that I have listed. It is my goal to learn helpful ideas from a variety of perspectives. I agree with some ideas from each source listed below, but I do not agree with all the thoughts presented. However, these teachings have all made me think, and I hope they do the same for you if you choose to explore them.
It was very helpful to me to study an overview of the reputable prophetic schools of thought before deciding which made the most sense to me biblically. Dr. Lightner's book has been a well-regarded prophetic resource for twenty-five years.
Pastor Farag posts a weekly prophecy update in which he discusses current events in light of prophecy. While we should never seek to discern prophecy through the lens of news reports, I believe current events are so dramatic that they should serve as a warning to anyone who has a solid understanding of prophecy.
Evans offers a broad and insightful overview of prophecy. If you think you disagree with him, keep studying!
The fourth MacArthur resource argues that Dispensationalism is a logical application of Calvinism.
"As the sun was setting, Abram fell into a deep sleep, and a thick and dreadful darkness came over him…. When the sun had set and darkness had fallen, a smoking firepot with a blazing torch appeared and passed between the pieces. On that day the Lord made a covenant with Abram and said, 'To your descendants I give this land, from the Wadi of Egypt to the great river, the Euphrates—the land of the Kenites, Kenizzites, Kadmonites, Hittites, Perizzites, Rephaites, Amorites, Canaanites, Girgashites and Jebusites'" (Gen. 15:12; 17-20).
"[A]nd I will bring my people Israel back from exile. 'They will rebuild the ruined cities and live in them. They will plant vineyards and drink their wine; they will make gardens and eat their fruit. I will plant Israel in their own land, never again to be uprooted from the land I have given them," says the Lord your God" (Amos 9:14-15, NIV).
According to prophecy, Israel was to be restored as a nation in the land promised to Abraham, "never again to be uprooted." This prophecy could not apply to the restoration from Babylonian captivity, as Israel was dramatically "uprooted" again—this time by the Romans.
"Therefore say to the Israelites, 'This is what the Sovereign Lord says: It is not for your sake, people of Israel, that I am going to do these things, but for the sake of my holy name, which you have profaned among the nations where you have gone. I will show the holiness of my great name, which has been profaned among the nations, the name you have profaned among them. Then the nations will know that I am the Lord, declares the Sovereign Lord, when I am proved holy through you before their eyes. For I will take you out of the nations; I will gather you from all the countries and bring you back into your own land. I will sprinkle clean water on you, and you will be clean; I will cleanse you from all your impurities and from all your idols. I will give you a new heart and put a new spirit in you; I will remove from you your heart of stone and give you a heart of flesh. And I will put my Spirit in you and move you to follow my decrees and be careful to keep my laws. Then you will live in the land I gave your ancestors; you will be my people, and I will be your God'" (Eze. 36:22-28, NIV).
God's promise of restoration and genuine religious revival was given unconditionally to a people who, as God predicted, would profane His name in all the world. Therefore, the promise was not given on condition of obedience. It was given solely on the basis of God's holy name, with repeated emphasis upon the divine "I will." God's promise of return to the land was fulfilled in 1948. Can His promise of spiritual cleansing for Israel be far from fruition?
I believe that the restoration of the nation of Israel in 1948 was the last prophecy to be fulfilled before Christ returns. We are living in the last days, and should expect and be ready for Christ to come at any moment.
Caryl Matrisciana's DVD Exposing Christian Palestinianism reveals the error of turning against Israel in these last days.
"I will bless those who bless you, and whoever curses you I will curse; and all peoples on earth will be blessed through you" (Gen. 12:3).
Human depravity and increasing satanic activity should be seen as signs that the end could be very near. Society has come to a point at which the articulation of Christian beliefs and morality is considered offensive and hateful by the world—where tolerance is defined as nothing short of wholehearted agreement with activities that are in conflict with the Bible.
Satan is very active in the church today, which should not surprise us, given that scripture teaches that there will be a great falling away at the end (II Thess. 2:3 & I Tim. 4:1).
In a DVD series entitled Wide is the Gate (3 volumes), Caryl Matrisciana traces the demonic influence of Hinduism and other eastern religions on the Christian Church. Many of Caryl's videos and teachings can be accessed on YouTube.
The Submerging Church DVD, by Joe Schimmell of Good Fight Ministries, exposes the seductive attraction of the emerging church for many would-be Christians. Some clips from The Submerging Church are available on YouTube.
The DVD Hell's Bells 2: The Power and Spirit of Popular Music, by Eric Holmberg of the Apologetics Group, takes a thoroughly Christian look at Satanism and the out-of-control sexuality in rock music. Hell's Bells 2 is also available on YouTube.
Despite the fact that Satan is incredibly active in our world, Christians should rejoice, for our "redemption draweth nigh" (Luke 21:28). No matter what Satan does or attempts to do, he has lost. Therefore, signs of increasing demonic desperation should be viewed in terms of the nearness of our deliverance.
Many Christians believe that the Antichrist will come from the European Union, and that he will control a global new world order. But what if the Antichrist isn't European? What if the Antichrist is Islamic? Of great interest to me is the description in Revelation of the martyrs being beheaded (see Rev. 20:4). Beheading is the manner in which Islamic fundamentalists create Christian martyrs (in addition to killing a great number of other individuals in this manner).
The European Antichrist theory posits a new world order in which secularists, the new age, and the occult unite to worship the Antichrist. This scenario could happen. Absolutely. But what if Antichrist doesn't have complete control of the world? What if two satanic forces—Islam and secularism—battle for control of the world, with neither side prevailing?
"At the time of the end the king of the South will engage him in battle, and the king of the North will storm out against him with chariots and cavalry and a great fleet of ships. He will invade many countries and sweep through them like a flood. He will also invade the Beautiful Land. Many countries will fall, but Edom, Moab and the leaders of Ammon will be delivered from his hand. He will extend his power over many countries; Egypt will not escape. He will gain control of the treasures of gold and silver and all the riches of Egypt, with the Libyans and Cushites in submission. But reports from the east and the north will alarm him, and he will set out in a great rage to destroy and annihilate many" (Dan. 11:40-44, NIV).
It doesn't sound like the Antichrist is in control of a global new world order. Rather, he faces constant threats from leaders powerful enough to alarm him. The text specifically says that Edom, Moab, and Ammon will be delivered from the Antichrist, meaning that he will not gain control of these territories. Therefore, the Islamic Antichrist theory could have merit—IF one understands that the Antichrist is just one of the deceptions Satan will use in the end times.
Short video by The Voice of the Martyrs, "Liena's Prayer"
If you are not saved, please listen to Pastor Francis Chan speak about the two most-destructive lies that keep millions from turning to God.
Please accept Jesus Christ as your Savior—your Substitute. He finished your salvation for you, and He offers it as a free gift if you will accept. The gift of salvation is offered by grace alone through faith alone. If you ask, God will give you the faith you need for salvation. Then, you will be ready whenever Christ comes!


text:
No. 8 Kansas Bounces Back at Baylor, 69-52
WACO, Texas — First points of the game rarely come in grander fashion than freshman guard Andrew Wiggins' half-court buzzer beater to send the game to halftime, yet the rookie guard followed it up with 11 second-half points to send No. 8/9 Kansas past Baylor, 69-52, Tuesday evening inside the Ferrell Center.
Ready to rebound from its first conference loss on Saturday at Texas, Kansas (17-5, 8-1 Big 12) made its second trip to the Lone Star state in the last four days to sweep the season series against Baylor (14-8, 2-7 Big 12). KU's victory maintained first-place status in the Big 12 Conference standings through the midway point, while handing the Bears its longest home court losing streak since the 2004-05 season.
KU's league-leading field goal percentage put up against Baylor's Big 12-best three-point efficiency ended in favor of the Jayhawks. KU outdid BU from the floor 46.3 (25-for-54) to 29.1 percent (16-for-55) advantage for the evening, a season-low for the Bears. While the Big 12's best three-point shooter, Baylor senior guard Brady Heslip, made his presence known early with four three-pointers in the first half, he went 0-for-7 from three-point territory in the second half. By night's end, KU had the market cornered in the three-point race, as well, making 6-of-10 attempts from beyond the arc compared to Baylor's 6-of-20.
Wiggins' half-court launch was a highlight worthy, but not the driving force behind the Jayhawk offense. Junior guard Naadir Tharpe provided not just the high score, but the consistency on Tuesday. He led all players with 14 points at halftime and went on to a game-high 22 points – just one off his career-high. His nine field goals broke his previous personal best, while his four threes tied his career mark.
Joining the guards on the leaderboard was sophomore forward Perry Ellis and senior forward Tarik Black. Ellis quietly put up his third double-double of the season with 14 points and 10 rebounds, while Black nicely filled the minutes left open by a foul-plagued Joel Embiid. Black's nine rebounds marked his most as a Jayhawk and he added six points.
Junior forward Cory Jefferson led the Bears with 14 points, while sophomore forward Rico Gathers pulled down a team-high nine boards on a night that Kansas dominated the glass, 45-31. Heslip added 12 points, all of which came from his four three-pointers in the first half.
Heslip and the Bears struck first when his first three-pointer just over a minute in to give the Bears a quick 5-0 lead. An 8-2 Jayhawk run, six of which coming from Ellis, quickly relegated the start and set a more even – and slower – scoring tone. Back-to-back layups from sophomore forward Jamari Traylor tilted the lead toward the Jayhawks at the under-12 media timeout, 12-11.
Missed shots under the basket on both sides of the floor kept the scoreboard relatively quiet. Getting the ball back to the perimeter did the trick on both sides. Heslip sandwiched his second and third threes around Tharpe's first of the night to tie the game, 19-19. Although KU couldn't match Heslip shot-for-shot from behind the arc, the Jayhawks found several options inside. Tharpe offset an odd turnover with six-straight points to regain the advantage.
When Black's defensive rebound evolved into a Wayne Selden, Jr. to Ellis dunk in transition and Tharpe downed his second three of the night, the Jayhawks shifted into control. If control hadn't been seized before that point, Wiggins' first points of the game did the trick. The rookie Jayhawk launched a half-court-and-then-some trey, sending his team to halftime with its biggest lead of the half, 35-27.
Tharpe got the ball rolling out of the break, connecting from three-point distance to see KU take its first double-digit lead of the evening, 38-27. In danger of momentum getting away from them, the Bears put together a 5-0 run to cut KU's lead back to six and a Bill Self timeout soon followed.
While Wiggins' first points came in dramatic fashion, he was still searching for bucket No. 2. Meanwhile, foul trouble haunted Embiid as he was sent to the bench with three fouls early in the second half without a point to his name. Meanwhile, two-straight scores from Jefferson and Isaiah Austin powered the Bears to a 9-2 run, again halting the visitors from breaking the game open.
Embiid's fourth foul sent Taurean Prince to the line, where he made both to slice the lead to a mere three points, 45-42. What started as an 11-point lead to kick off the second half dwindled rapidly thanks to a 2-for-10 KU shooting slump through the middle of the frame.
Sensing his team's need for a jolt, the Kansas point guard delivered. Tharpe pulled up from the top of the key and knocked down a crucial three-pointer, and KU grasped control once again. Wiggins piggy-backed it, coming up with his second and third baskets in back-to-back fashion. Less than 30 seconds separated his three-pointer and dunk that shoved KU's lead back to double-digits with eight minutes to play, 54-44.
There it would remain as the Jayhawks used late fouls and last-minute scores to cruise toward victory. Embiid finally got his opportunity, as well, chalking up five points in the final four minutes en route to the 69-52 win.
Kansas returns home to host West Virginia on Saturday, Feb. 8, at 3 p.m. on ESPN and then play at Kansas State on its third of four ESPN Big Mondays on Feb. 10 at 8 p.m. The Jayhawks will host TCU on Saturday, Feb. 15, at 3 p.m. on the Big 12 Television Network.
KU STARTERS (Season/Career Starts): Jr. Naadir Tharpe (19/19), Fr. Wayne Selden, Jr. (22/22), Fr. Andrew Wiggins (22/22), So. Perry Ellis (22/25), Fr. Joel Embiid (14/14)
SERIES INFO: Kansas leads 21-4
ATTENDANCE: 8,305 (10,284 capacity)
KANSAS' WIN…
Improved KU to 17-5 on the season
Made Kansas 8-1 in Big 12 play for the first time since the 2010-11 season
Bumped up KU's all-time series lead over Baylor to 21-4, including 9-2 at the Ferrell Center
Made Bill Self 13-4 all-time against BU (13-3 while at KU), 317-64 while at Kansas and 524-169 overall
Made KU 2,118-817 all-time
TEAM NOTES
Baylor's loss was the Bears' fourth-straight at home, BU's longest home losing streak since dropping six in a row during the 2004-05 season.
Kansas held the Bears to a season-low 52 points. It's lowest scoring output at home since beating TCU 51-40 last season in Waco.
Kansas shot 46.3 percent (25-for-54) as a team and held Baylor to a season-low 29.1 field goal percentage (16-for-55). The 16 field goals were a season-low for any KU opponent this season and also marks the first time KU has held an opponent under 30 percent shooting since keeping Missouri to a 29.3 mark on March 5, 2011.
That's the first time since the Battle 4 Atlantis that KU shot under 50 percent in back-to-back games. (38.5 percent at Texas; 46.3 at Baylor)
For the second-straight game, KU tied a season-low with 13 makes from the free-throw line (13-for-20).
Baylor began the night as the Big 12's most efficient three-point shooting team, but Kansas shot 60 percent (6-for-10) compared to Baylor's 30 percent (6-for-20).
That was due in large part to holding the Big 12's best three-point shooter, senior G Brady Heslip, to zero points in the second half after he made four three-pointers in the opening stanza.
KU outrebounded Baylor, 45-31, marking the fifth time in Big 12 play – and 10th time overall – that the Jayhawks' rebounding margin surpassed double-digits.
INDIVIDUAL NOTES
Junior G Naadir Tharpe led all scorers at halftime with 14 points and for the game with 22 – one shy of his career-high and his fourth 20+ point performance of his career.
Tharpe went 9-for-13 from the floor, setting a new career-high for field goals, while his four three-pointers tied a career-high.
Freshman G Andrew Wiggins nailed KU's first half-court shot of the season to end the first half. His buzzer beater also marked his first points of the game.
Thanks to the long ball, Wiggins had three points at halftime. He scored his 14 total points in the last 20:01 of the game.
Wiggins tied his career-high in blocks (2), steals (3) and assists (5).
Senior F Tarik Black set a new season-high with nine rebounds.
Sophomore F Perry Ellis cranked out his third double-double of the year and fourth of his career with 14 points and 10 rebounds.
Freshman C Joel Embiid was in danger of not scoring for the first time this season. He scored his first point with 3:44 remaining and ended the night with five points and seven rebounds.
Embiid rejected one shot and now has 57 blocks on the season, just five behind Eric Chenowith (62, 1998) for the Kansas freshman blocking record.
Embiid now has a block in 16-straight games.


How to Play ? : this is very nice Barbie girl.in this game Barbie make over. BarBie going to party.you are a good make up artist.you can help Barbie. Barbie want to the most beatiful girl atparty. play for this game use mouse. have a good time.
Played : This Game Played 9358 times.


Anything can happen when a full moon is showing, and on the eve of the full moon on Sept. 16 Indian River scored 19 unanswered points to defeat Stephen Decatur in their home opener. Big plays, a prepared defense and a punishing ground attack squelched the Bayside perennial powerhouse, but it wasn't without a cost.
Josh Dean tries to evade Stephen Decatur defender on Friday, Sept. 16.
Though they improved their record to 2-0, Indian River will have to play Washington High School without their head coach, Jim Bunting, and offensive lineman/linebacker Ty Jennings — because of their ejections against the Seahawks.
Jennings and Seahawk interior lineman Kyle Sappington exchanged words and mixed it up more than the officials liked, so they were ejected — which sent Bunting into a frenzy.
Bunting apologized to his team Sept. 19 at practice and explained that he would go to war for or with any of his players but didn't want them to follow his example.
"I'm terribly embarrassed, and it's a black eye for the program, but you have to learn from your mistakes," said Bunting.
The ejection came prior to halftime and Stephen Decatur had already taken a 7-0 lead on a Brian Tustin 23-yard interception return for a touchdown. Indian River was able to move the ball but failed to punch the ball into the endzone twice.
Wide receiver Andy Bokinsky made up for the week before and made two nice must-have snags on third and fourth downs to keep drives going, but Indian River was unable to capitalize on field position.
Josh Dean made a great leaping catch in between three Stephen Decatur defenders that was good for 44 yards. Indian River would eventually turn the ball over on downs.
Bunting said his team would practice red-zone situations all week prior to the Washington game on Sept. 23 and that they'd be ready to punch it in after sustaining long drives.
Free safety Nik Kmetz laid a big hit on DeAndre Gordon on second and long, which set up Indian River for another pass-rushing situation. Defensive linemen Philip Townsend and Brian Lynch combined for the sack on the next play, which set up a fourth and a very long punt situation.
Lynch and Townsend spearheaded a relentless Indian defensive attack that accrued four sacks and limited star running back Kendall Harmon to 35 yards on 15 carries.
Indian River's defense kept the game close. Their offense was waiting to bust loose and did on three Josh Gott scampers.
After carrying the ball only six times against Cape Henlopen, Gott approached Bunting and his staff and requested more carries.
Gott received the lion's share of the carries by toting the ball 19 times for 196 yards. He scored on 2-, 35- and 40-yard runs, but it was his pulling lineman Townsend that popped the final touchdown free.
Townsend scurried around the left end with the speed of a tailback to clear the way for Gott. Townsend destroyed the first defender he saw, which allowed Gott to go untouched for Indian River's final touchdown.
Indian River will host Washington High School on Sept. 23 for a 7 p.m. game.


text:
Africa Risen
A New Era of Speculative Fiction
Sheree Renée Thomas,
A 2023 NAACP Image Award Nominee!
A NPR Best of the Year pick!
A Book Riot Best SFF of the Year pick!
"[A] magnificent and wide-ranging anthology . . . A must-read for all genre fans."—Publishers Weekly, starred review
From award-winning editorial team Sheree Renée Thomas, Oghenechovwe Donald Ekpeki, and Zelda Knight comes an anthology of thirty-two original stories showcasing the breadth of fantasy and science fiction from Africa and the African Diaspora.
A group of cabinet ministers query a supercomputer containing the minds of the country's ancestors. A child robot on a dying planet uncovers signs of fragile new life. A descendent of a rain goddess inherits her grandmother's ability to change her appearance—and perhaps the world.
Created in the legacy of the seminal, award-winning anthology series Dark Matter, Africa Risen celebrates the vibrancy, diversity, and reach of African and Afro-Diasporic SFF and reaffirms that Africa is not rising—it's already here.
At the Publisher's request, this title is being sold without Digital Rights Management Software (DRM) applied.